在bash脚本中,如何在while循环条件中调用函数

下面是我的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 # ...