下面是我的shell脚本。 如何在while循环条件块中比较函数的退出状态? 无论我从check1
函数返回,我的代码进入while循环
#!/bin/sh check1() { return 1 } while [ check1 ] do echo $? check1 if [ $? -eq 0 ]; then echo "Called" else echo "DD" fi sleep 5 done
删除test
命令 – 也被称为[
。 所以:
while check1 do # Loop while check1 is successful (returns 0) if check1 then echo 'check1 was successful' fi done
从Bourne和POSIX shell派生的shell在条件语句之后执行一个命令 。 看待它的一种方法是, if
测试成功或失败,而不是真或假(虽然true
被认为是成功的)。
顺便说一句,如果你必须测试$?
显式地(这通常是不需要的)然后(在Bash中) (( ))
构造通常更易于阅读,如下所示:
if (( $? == 0 )) then echo 'worked' fi
函数(或命令)执行返回的值存储在$?中,一个解决方案是:
check1 while [ $? -eq 1 ] do # ... check1 done
一个更好更简单的解决方案可能是:
while ! check1 do # ... done
在这种形式中,零为真,非零为假,例如:
# the command true always exits with value 0 # the next loop is infinite while true do # ...
你可以用!
否定价值:
# the body of the next if is never executed if ! true then # ...