Shell脚本:退出调用不能使用反引号



我使用exit 1在错误发生时停止shell脚本执行。

Shell脚本

    test() {
    mod=$(($1 % 10))
    if [ "$mod" = "0" ]
    then
        echo "$i";
        exit 1;
    fi
}

for i in `seq 100`
do
    val=`test "$i"`
    echo "$val"
done
echo "It's still running"

为什么不工作?如何停止shell脚本的执行?

exit退出的shell是由命令替换启动的shell,而不是启动命令替换的shell。

试试这个:

for i in `seq 100`
do
    val=`test "$i"` || exit
    echo "$val"
done
echo "It's still running"

您需要显式检查命令替换的退出代码(该代码通过变量赋值传递),如果它不为零,则再次调用exit。


顺便说一下,您可能希望在函数中使用return而不是exit。让函数调用者决定做什么,除非错误非常严重,以至于没有退出shell的逻辑选择:

test () {
    if (( $1 % 10 == 0 )); then
        echo "$i"
        return 1
    fi
}

exit命令只终止执行它的(子)shell。如果要终止整个脚本,则必须检查退出状态($?),并作出相应反应:

#!/bin/bash
test() {
    mod=$(($1 % 10))
    if [ "$mod" -eq "0" ]
    then
        echo "$i";
        exit 1;
    fi
}

for i in `seq 100`
do
    val=`test "$i"`
    if [[ $? -eq 1 ]]
    then
      exit 1;
    fi
    echo "$val"
done
echo "It's still running"

最新更新