我正在使用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脚本?
答案 0 :(得分:2)
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
}
答案 1 :(得分:1)
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"