我正在使用包含键和值的.conf。
某些键包含
之类的数字deployment.conf
EAR_COUNT=2
EAR_1=xxx.ear
EAR_2=yyy.ear
当我尝试使用特定键检索该值并与整数值(即自然数)进行比较时。
但无论我从.conf中检索到什么值,它都应该是String数据类型。
我应如何比较Linux Bash脚本中的两个值。
简单地说:我应该如何比较Linux中的两个值。?
前:
. ./deployment.conf
count=$EAR_COUNT;
echo "count : $count";
if [ $count -gt 0 ]; then
echo "Test"
fi
我收到了以下错误:
count : 2
: integer expression expected30: [: 2
答案 0 :(得分:1)
他们是bash
中的所有字符串,尽管您有能力typeset
- 键入内容以标记它们的方式不同。
如果您想进行数字比较,只需使用-eq
(或其-gt
,-le
等兄弟而不是==
,!=
等等于:
if [[ $num -eq 42 ]] ; then
echo Found the answer
fi
可以在bash
下的CONDITIONAL EXPRESSIONS
联机帮助页中找到所有比较运算符。
如果你有某些你认为应该是一个数字并且它不起作用的东西,我保证它不是一个数字。做类似的事情:
echo "[$count]"
确保它最后没有换行符,或者更好的是,如果它包含奇怪的字符,如Windows行结尾,则获取它的十六进制转储:
echo -n $count | od -xcb
您正在看到的事实:
: integer expression expected30: [: 2
将:
返回到该行的 start ,而不是更常见的:
-bash: [: XX: integer expression expected
倾向于表明存在回车符,该回车符可能来自deployment.conf
具有那些Windows行结尾(\r\n
而非UNIXy \n
)。
十六进制转储应该很明显,此时你需要去清理你的配置文件。
答案 1 :(得分:1)
参考:http://linux.die.net/man/1/bash
-eq,-ne,-lt,-le,-gt或-ge
我已检查过你的代码,
<强> deployment.conf 强>
# 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文件必须具有有效的 BASH分配 ,这意味着在&#39之前和之后应该没有空格; =&#39;登录。
此外,您在conf部分中提到WAR_COUNT = 3并使用了&#39; count = $ EAR_COUNT;&#39;在脚本部分。请检查一下。
答案 2 :(得分:1)
您的\r
变量中很可能有EAR_COUNT
之类的非整数字符。 删除所有非数字,同时分配给count
,如下所示:
count=${EAR_COUNT//[^[:digit:]]/}
echo "count : $count";
if [[ $count -gt 0 ]]; then
echo "Test"
fi