Bash - IF语法

时间:2015-11-02 12:53:50

标签: bash

我正在运行这行代码:

until ([ "$completed" == "$started" ] && [ "$completed" == "$total" ] && [ "$total" == "$started" ] && [ "$completed" -gt 0 ] && [ "$started" -gt 0 ] && [ "$total" -gt 0 ]) || [ "$totalerrors" -gt 0 ]; do

但是我收到了line 25: [: : integer expression expected

的错误

OR部分的正确语法是什么?

由于

1 个答案:

答案 0 :(得分:4)

until ([ "$completed" == "$started" ] &&
       [ "$completed" == "$total" ] &&
       [ "$total" == "$started" ] &&
       [ "$completed" -gt 0 ] &&
       [ "$started" -gt 0 ] &&
       [ "$total" -gt 0 ]) ||
       [ "$totalerrors" -gt 0 ]; do

您的代码看起来不错。可能是您正在检查的其中一个变量未设置,因此您最终会得到一个看起来像[ "" -gt 0]的调用。一些建议:

  1. 请勿将==[一起使用。使用=(正确的运营商)或切换到[[ ... == ... ]]

  2. 不要使用=来比较整数;使用-eq。 (例如,[ 03 = 3 ]失败,而[ 03 -eq 3 ]成功。)

  3. 使用{ ... }代替( ... )对您的测试进行分组。括号开始一个不必要的子shell。请注意,{ ... }中的最终命令必须以;终止。

  4. 使用[[&&||提供正确的优先权。

    [[ $completed == $started && ... && $total -gt 0 || $totalerrors -gt 0 ]]