比较Linux中的值
我使用的是包含键和值的.conf 某些键包含以下数字: deployment.conf比较Linux中的值,linux,bash,Linux,Bash,我使用的是包含键和值的.conf 某些键包含以下数字: deployment.conf EAR_COUNT=2 EAR_1=xxx.ear EAR_2=yyy.ear # CONF FILE EAR_COUNT=5 当我尝试使用特定键检索该值并与整数值(即自然数)进行比较时 但无论我从.conf中检索到什么值,它都应该是字符串数据类型 我应该如何在LinuxBash脚本中比较这两个值 简单地说:我应该如何比较Linux中的两个值 例: 我发现以下错误: count : 2 : intege
EAR_COUNT=2
EAR_1=xxx.ear
EAR_2=yyy.ear
# CONF FILE
EAR_COUNT=5
当我尝试使用特定键检索该值并与整数值(即自然数)进行比较时
但无论我从.conf中检索到什么值,它都应该是字符串数据类型
我应该如何在LinuxBash脚本中比较这两个值
简单地说:我应该如何比较Linux中的两个值
例:
我发现以下错误:
count : 2
: integer expression expected30: [: 2
它们都是bash
中的字符串,尽管您有能力进行排版
——但请键入不同的内容来标记它们
如果您想进行数字比较,只需使用-eq
(或者它的兄弟,如-gt
,-le
)而不是=
,=代码>等等:
if [[ $num -eq 42 ]] ; then
echo Found the answer
fi
比较运算符的完整范围可以在bash
手册页的条件表达式下找到
如果你有一些你认为应该是数字的东西,但它不起作用,我保证它不是数字。做一些类似于:
echo "[$count]"
为了确保它的结尾没有换行符,或者更好的是,如果它包含奇怪的字符,比如Windows行的结尾,请获取十六进制转储:
echo -n $count | od -xcb
你看到的事实是:
: integer expression expected30: [: 2
将:
返回到行的开头,而不是更常见的:
-bash: [: XX: integer expression expected
倾向于指示其中存在回车符,可能来自具有这些Windows行结尾的deployment.conf
(\r\n
而不是UNIXy\n
)
十六进制转储应该使这一点变得明显,此时您需要去清理配置文件。Ref:
-等式-ne,-lt,-le,-gt或-ge
- 这些是bash脚本中的算术二进制运算符
我查过你的密码了
deployment.conf
EAR_COUNT=2
EAR_1=xxx.ear
EAR_2=yyy.ear
# CONF FILE
EAR_COUNT=5
testArithmetic.sh
#!/bin/bash
. ./deployment.conf
count=$EAR_COUNT;
echo "count : $count";
if [ $count -gt 0 ]; then
echo "Test"
fi
运行上述脚本的计算结果为数值比较。如果您遇到任何问题,请与我们分享您的conf文件内容。如果要在脚本文件中包含conf文件,请注意conf文件必须具有有效的BASH赋值,这意味着“=”符号前后不应有空格
另外,您在conf部分提到了WAR\u COUNT=3,并使用了'COUNT=$EAR\u COUNT;'在脚本部分。请检查此项。在EAR\u COUNT
变量中很可能有一些非整数字符,如\r
在分配给计数时去除所有非数字
,如下所示:
count=${EAR_COUNT//[^[:digit:]]/}
echo "count : $count";
if [[ $count -gt 0 ]]; then
echo "Test"
fi
不清楚字符串和整数是什么意思。你能添加一些例子吗?'-gt'也是数值比较运算符。@ManikandarajS:因此短语或其兄弟。ashokhein自己使用了数值比较运算符'-gt'-“if[$count-gt 0];然后“@paxdiablo我得到以下错误。。。count:2:integer expression expected30:[:2–@ashokhein,那么它不是一个数字。我已经添加了一些关于如何检查此项的建议。正在进行更新。我收到以下错误…count:2:integer expression expected30:[: 2@ashokhein我已尝试了您发布的代码,效果很好。请尝试从此处下载,您必须在EAR\u COUNT变量中添加一些\r或\n字符,