Bash 脚本嵌套条件语句中的错误

Bash 脚本嵌套条件语句中的错误

收到下面的错误,因为我确信我的语法在某种程度上与嵌套条件有关。基本上我不想向 telegram_bot 发送空消息,如果它检测到空消息,它会抛出错误。第一个 IF 只是检测其 NULL 是否有效。但第 32 行的情况并非如此。

xxx.sh: line 32: syntax error near unexpected token `)'
xxx.sh: line 32: `    *)       # contains nothing or only spaces'


 26 if  [ -z "$message" ]; then
 27         echo "Please pipe a message to me!"
 28 else
 29   case $message in
 30     *[!\ ]*) # contains non-space
 31         sendTelegram                                                                                                                                                                                                                      
 32     *)       # contains nothing or only spaces
 33         DO NOTHING...
 34   esac
 35 fi

答案1

您需要终止您的案例条款:

case $message in
    *[!\ ]*) # contains non-space
        sendTelegram
    ;;                                                                                                                                                                                                          
    *)       # contains nothing or only spaces
        DO NOTHING..
    ;;
esac

条件结构

;;每个子句必须以, ;&, 或结尾;;&

如果;;使用该运算符,则在第一个模式匹配之后不会尝试后续匹配。使用;&in 代替;;会导致执行继续与下一个子句关联的命令列表(如果有)。使用;;&in 代替;;会使 shell 测试下一个子句中的模式(如果有),并在成功匹配时执行任何关联的命令列表。


正如 Kusalananda 指出的,如果你愿意的话,你实际上可以跳过最后一个子句中的终止符。

相关内容