收到下面的错误,因为我确信我的语法在某种程度上与嵌套条件有关。基本上我不想向 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 指出的,如果你愿意的话,你实际上可以跳过最后一个子句中的终止符。