Shell
Shell 腳本 - 意外標記“else”附近的語法錯誤
使用以下 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
作為命令執行並失敗。之前空格的原因
]
是類似的。因為否則它不會被辨識為它自己的參數。