3

以下代码段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

这部分:echo "the return code:$?."在屏幕上回显:the return code:4.

它不显示WARNING。它只显示ERROR然后中断for包含此代码的循环。

我究竟做错了什么?


以下是我尝试过的导致相同问题的条件比较的变化:

  1. if [ $? -eq 5 ]
  2. if [ $? -eq "5" ]
  3. if [ $? == 5 ]
  4. if [ $? == "5" ]
  5. if [[ $? -eq 5 ]]
  6. if [[ $? -eq "5" ]]
  7. if [[ $? == "5" ]]
  8. if [[ $? == 5 ]]
4

1 回答 1

6

原因是最后执行的命令$?的返回码。你在 之前运行一个命令,所以它是你正在测试的返回码,它总是 0。echoifecho

此外,在您的情况下,由于您正在重新测试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
于 2012-11-08T15:38:34.467 回答