下面的代码段else应该进入语句elif.
#The following line returns 3, 4 or 5 as the exit code.
$BASH_EXEC adbE.sh "adb $ARGUMENT install $f"
echo "the return code:$?."
if [ $? -eq 5 ]
then
#do nothing, success
continue
elif [ $? -eq 4 ]
then
echo "WARNING"
else
echo "ERROR"
break
fi
Run Code Online (Sandbox Code Playgroud)
这部分:echo "the return code:$?."将此回显到屏幕:the return code:4.
并且它不显示WARNING.它只显示ERROR然后打破for包含此代码的循环.
我究竟做错了什么?
以下是我尝试过的条件比较的变化导致了同样的问题:
if [ $? -eq 5 ]if [ $? -eq "5" ]if [ $? == 5 ]if [ $? == "5" ]if [[ $? -eq 5 ]]if [[ $? -eq "5" ]]if [[ $? == "5" ]]if [[ $? == 5 ]]原因是它$?是最后执行的命令的返回码.您正在运行echo命令if,因此它是echo您正在测试的返回代码,它始终为0.
此外,在您的情况下,还有一个问题是由于您正在重新测试elif语句中的返回值.初始测试(即[ $? -eq 5 ])也会改变其值$?,因此重新测试它会产生意想不到的结果.
要解决此问题,请在执行之前保存以前的返回代码echo,然后将所保存的版本用于以后的所有测试:
ret=$?
echo "the return code:${ret}."
if [ ${ret} -eq 5 ]
then
#do nothing, success
continue
elif [ ${ret} -eq 4 ]
then
echo "WARNING"
else
echo "ERROR"
break
fi
Run Code Online (Sandbox Code Playgroud)