我正在运行这行代码:
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部分的正确语法是什么?
由于
答案 0 :(得分:4)
until ([ "$completed" == "$started" ] &&
[ "$completed" == "$total" ] &&
[ "$total" == "$started" ] &&
[ "$completed" -gt 0 ] &&
[ "$started" -gt 0 ] &&
[ "$total" -gt 0 ]) ||
[ "$totalerrors" -gt 0 ]; do
您的代码看起来不错。可能是您正在检查的其中一个变量未设置,因此您最终会得到一个看起来像[ "" -gt 0
]的调用。一些建议:
请勿将==
与[
一起使用。使用=
(正确的运营商)或切换到[[ ... == ... ]]
。
不要使用=
来比较整数;使用-eq
。 (例如,[ 03 = 3 ]
失败,而[ 03 -eq 3 ]
成功。)
使用{ ... }
代替( ... )
对您的测试进行分组。括号开始一个不必要的子shell。请注意,{ ... }
中的最终命令必须以;
终止。
使用[[
,&&
和||
提供正确的优先权。
[[ $completed == $started && ... && $total -gt 0 || $totalerrors -gt 0 ]]