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