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