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을 사용하면 ;;쉘은 다음 절의 패턴을 테스트하고(있는 경우) 성공적인 일치 시 관련 명령 목록을 실행합니다.


Kusalananda가 지적했듯이 원하는 경우 실제로 마지막 절의 종결자를 건너뛸 수 있습니다.

관련 정보