解決執行腳本報syntax error: unexpected end of file或syntax error near unexpected token `fi'錯誤的問題
我們在編輯Linux服務器上的文件時,如果直接在Linux環境下編輯的話,比較麻煩,大段粘貼格式比較亂,還得自己一行一行去調整,因此會選擇用編輯器來編輯我們Linux環境下的文件,我用的是NodePad++,
今天我要說的重點是,我們在用NodePad++編輯完腳本文件並上傳到服務器后,直接運行腳本報錯的問題,比如我要在NodePad++編輯器中編輯下面這段腳本
a=400
b=800
if [ $a == $b ]
then
echo "a is equal to b"
else
echo "a is not equal to b"
fi
先來說說第一個錯誤:syntax error: unexpected end of file,大家可以把上面那段腳本內容放到腳本文件nginx_check.sh當中(當然大家可以隨便起個名字,后綴是.sh就可以了),需要注意的是最后一個"fi"
編輯完該腳本我們保存,自動就會上傳到Linux服務器,下面我們便在Linux服務器執行該腳本(需要注意的是,該腳本文件一定要有執行權限,如果沒有執行權限就使用chmod +x nginx_check.sh來給腳本增加執行權限),我們會看到如下所示的錯誤,提示結尾不合法
[root@bhz004 keepalived]# sh ./nginx_check.sh
./nginx_check.sh: line 10: syntax error: unexpected end of file
[root@bhz004 keepalived]#
我們再來看另外一個錯誤:syntax error near unexpected token `fi',大家可以直接把腳本內容粘貼到腳本文件中,最后一個"fi"此時是黑色的,我們不用管它。
這時我們執行該腳本,會看到如下所示錯誤,提示第9行"fi"有問題。
上面兩個問題都是由於.sh文件的格式為dos格式。而linux只能執行格式為unix格式的腳本。因為在dos/window下按一次回車鍵實際上輸入的是“回車(CR)”和“換行(LF)”,而Linux/unix下按一次回車鍵只輸入“換行(LF)”,所以修改的sh文件在每行都會多了一個CR,所以Linux下運行時就會報錯找不到命令。
我們可以查看該腳本文件的格式,方法是使用命令:vim nginx_check.sh進入編輯文件界面,如下圖所示。
直接輸入":",然后在":"之后輸入"set ff"如下圖所示
回車即可看到腳本格式,如下圖所示,可以看到當前腳本格式是dos。
我們需要把格式改為unix,方法是輸入":set ff=unix",也可以輸入":set fileformat=unix"如下圖所示。
輸入完之后,回車即可完成切換格式。然后我們再輸入":set ff"來查看格式,如下圖所示,可以看到當前腳本格式變成了我們想要的"unix"了。
輸入:wq保存。
這時我們再執行nginx_check.sh就沒問題了。