linux - 在 Linux 中比较值

标签 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

最佳答案

它们是 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/

相关文章:

c - 每次从一个目录更改到另一个目录并从那里调用 make 时,目标文件都会被编译

linux - 关于 grep 命令

linux - 如何从 Linux 设备驱动程序访问 USB 总线号?

python - 与 bsddb 有关的许可证问题

linux - 从 Linux 中的现有文件创建文件

linux - 时间 "command"让您的配置文件运行。是否有一个命令可以让您分析最大和平均内存消耗?

linux - 如何使用 Bash shell 进行重定向和追加?

bash - 权限在查找 : why do we need 2>&1? 中被拒绝

git - 在 merge 冲突期间,Git 如何监听编辑器的更改?

linux - 基本 bash 重定向