我正在使用包含键和值的 .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
最佳答案
它们是 bash
中的所有 字符串,尽管您有能力执行排版
- 键入内容以不同方式标记它们。
如果你想做数值比较,只需要使用-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
:
回到行的开始,而不是更常见的:
-bash: [: XX: integer expression expected
倾向于指示其中存在回车符,这可能来自 deployment.conf
具有那些 Windows 行结尾(\r\n
而不是 UNIXy \n
).
十六进制转储应该使这一点显而易见,此时您需要去清理您的配置文件。
关于linux - 在 Linux 中比较值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28019377/