Shell

Shell 腳本 - 意外標記“else”附近的語法錯誤

  • May 15, 2021

使用以下 shell 腳本,為什麼我會收到錯誤

syntax error near unexpected token `else'

外殼腳本

echo "please enter username"
read user_name
echo "please enter password"
read -s pass
echo ${ORACLE_SID}
SID=${ORACLE_SID}
if ["${ORACLE_SID}" != 'Test'] then
sqlplus -s -l $USER_NAME/$PASS@$SID <<EOF
copy from scott/tiger@orcl insert EMP using select * from EMP
exit
EOF
else
echo "Cannot copy"
fi

你必須終止這樣的條件if

if [ "${ORACLE_SID}" != 'Test' ]; then
                               ^ semicolon

或像這樣:

if [ "${ORACLE_SID}" != 'Test' ]
then
                               ^ newline

注意:您還必須在 之後[和之前放置空格]

;or換行的原因是if語句的條件部分只是一個命令。任何長度的命令都是精確的。shell 執行該命令,檢查命令的退出狀態,然後決定是執行then部分還是else部分。

因為命令可以是任意長度,所以需要一個標記來標記條件部分的結束。那是;or 換行符,後跟then.

後面有空格的原因[是因為[是一個命令。通常是外殼的內置函式。shell 執行命令[,其餘參數作為參數,包括]as 強制的最後一個參數。如果你沒有[在 shell 後面加空格,將嘗試[whatever作為命令執行並失敗。

之前空格的原因]是類似的。因為否則它不會被辨識為它自己的參數。

引用自:https://unix.stackexchange.com/questions/87776