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

时间:2014-12-28 08:06:43

标签: linux bash shell sh

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

3 个答案:

答案 0 :(得分:10)

删除test命令 - 也称为[。所以:

while check1
do
    # Loop while check1 is successful (returns 0)

    if check1
    then
        echo 'check1 was successful'
    fi

done

从Bourne和POSIX shell派生的shell在条件语句之后执行命令。查看它的一种方法是whileif测试成功或失败,而不是真或假(尽管true被认为是成功的。)

顺便说一句,如果你必须明确地测试$?(通常不需要),那么(在Bash中)(( ))结构通常更容易阅读,如:

if (( $? == 0 ))
then
    echo 'worked'
fi

答案 1 :(得分:8)

函数(或命令)执行返回的值存储在$?中,一个解决方案是:

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
    # ...

答案 2 :(得分:0)

为了完整起见,另一种方法是使用 while 的内联函数退出代码

 while check1  ; [ $? -eq 0 ] ; do

来自here

如果将方法更改为“echo”style return value,也可以使用参数。

 while [ $(check1 my_param) < 33] ; do ...