Linux Shell腳本syntax error: unexpected end of file原因及解決
腳本調(diào)試老不好,多半是要廢了......
背景
項目需要部署新的后臺服務,于是開始編寫shell部署腳本,然后把寫好的腳本放到服務器上,發(fā)現(xiàn)不能執(zhí)行一直報錯。
但是當我vim查看腳本,并沒有第51行,反復執(zhí)行總是提示錯誤,內(nèi)心是拒絕的。
原因
最后發(fā)現(xiàn)我的腳本是在window環(huán)境下編寫的,然后傳到linux服務器上的,這時候問題來了,doc下的文本內(nèi)容格式和unix下的格式有所不同,比如dos文件傳輸?shù)絬nix系統(tǒng)時,會在每行的結(jié)尾多一個^M結(jié)束符。
(我的就是這個原因)
解決
vim serverDeploy.sh :set fileformat=unix :wq
或者
dos2unix命令將dos文件轉(zhuǎn)換為unix格式(dos2unix需要安裝:yum -y install dos2unix)
dos2unix serverDeploy.sh
重新執(zhí)行腳本就行可以了
sh -x serverDeploy.sh
建議:
1.最好在linux下編寫shell腳本,如果喜歡window下的ide,記得上傳腳本到服務器時,記得修改腳本的格式,和執(zhí)行權(quán)限;
2.可以使用 sh -n serverDeploy.sh 命令來檢查腳本的語法;
3.注意shell的中的變量引用,如:
[ -z $VAR ]
字符串變量在使用時請養(yǎng)成加雙引號的習慣 "$VAR",這樣無論是字符串為空或是字符串中含有空格,都不會有任何問題。
改為:
if [ -z "$PASODSPATH" ]; then
或者:
if [ -z "$PASODSPATH" ] then
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
shell編程中for循環(huán)語句的實現(xiàn)過程及案例
Bash?Shell中主要提供了三種循環(huán)方式:for、while和until,下面這篇文章主要給大家介紹了關于shell編程中for循環(huán)語句的實現(xiàn)過程及案例,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下2022-04-04一天一個shell命令 linux文本內(nèi)容操作系列-grep命令詳解
這篇文章主要介紹了一天一個shell命令 linux文本內(nèi)容操作系列-grep命令詳解 ,需要的朋友可以參考下2016-06-06linux crontab 實現(xiàn)每秒執(zhí)行的實例
下面小編就為大家?guī)硪黄猯inux crontab 實現(xiàn)每秒執(zhí)行的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-04-04同一個文件在windows和linux下計算md5哈希不一致的原因及解決方法
下面小編就為大家?guī)硪黄粋€文件在windows和linux下計算md5哈希不一致的原因及解決方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-03-03