比较Linux中的值

时间:2015-01-19 06:56:18

标签: linux bash

我正在使用包含键和值的.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

3 个答案:

答案 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

  • 这些是bash脚本中的算术二进制运算符。

我已检查过你的代码,

<强> 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