麻烦在bash中使用if-loop的布尔比较 - >相信它与数据类型有关

时间:2016-03-27 01:02:22

标签: bash shell

我一直有这个让我疯狂的问题。基本上我使用if语句,当使用python脚本创建的.dat文件中的第一行数据与1进行比较时运行。所以我将它设置为:

t=$(<data.dat)
if [ "$t" -eq "1" ]
then
    do something
else
    do something else
fi

但它永远不会奏效!我有什么想法我做错了吗?我正在使用shell。此外,这个for循环在while循环中,所以也许我错过了与嵌套有关的东西?

1 个答案:

答案 0 :(得分:0)

bash生成一个好的输入数据文件,验证它:

echo 1 > data2.dat
hexdump -C data2.dat

......输出:

00000000  31 0a                                             |1.|
00000002

现在在 python 数据输出上运行hexdump -C data.dat。它将与上面显示的输出相同(即&#39; 31 0a &#39;),或者不同。 如果它是相同的,则问题必须是未指定的做某事然后执行其他 bash代码的拼写错误或其他错误。如果hexdump输出不相同,则问题出在 python 代码中。

证明上述输出文件 data2.dat 是好的,不需要进一步过滤。

bash代码是正确的:

if [ "$(<data2.dat)" = "1" ]
then
  echo yes
else
  echo no
fi

输出:

yes

使用&#39; 2 重新测试&#39;而不是&#39; 1 &#39; (单行,与上述相同,但没有hexdump):

echo 2 > data2.dat; if [ "$(<data2.dat)" -eq "1" ]; then  echo yes; else echo no; fi

输出:

no