比较 Linux 中的值

Compare values in Linux

我正在使用包含键和值的 .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 中的 所有 个字符串,尽管您有能力做 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

倾向于表示那里有一个马车 return,这可能来自 deployment.conf 具有那些 Windows 行结尾(\r\n 而不是 UNIXy \n).

十六进制转储应该使这一点显而易见,此时您需要去清理您的配置文件。

参考:http://linux.die.net/man/1/bash

-eq, -ne, -lt, -le, -gt, or -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 文件,请注意 conf 文件必须具有有效的 BASH assignments,这意味着, '='前后应该没有space。

此外,您在 conf 部分提到了 WAR_COUNT=3,并在脚本部分使用了 'count=$EAR_COUNT;'。请也检查一下。

您的 EAR_COUNT 变量中很可能有一些非整数字符,例如 \r像这样分配给 count 时去除所有非数字

count=${EAR_COUNT//[^[:digit:]]/}

echo "count : $count";
if [[ $count -gt 0 ]]; then
    echo "Test"
fi