溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

CentOS7運(yùn)行.sh腳本提示syntax error: unexpected end of file怎么辦

發(fā)布時(shí)間:2021-05-31 11:07:41 來(lái)源:億速云 閱讀:310 作者:小新 欄目:開(kāi)發(fā)技術(shù)

小編給大家分享一下CentOS7運(yùn)行.sh腳本提示syntax error: unexpected end of file怎么辦,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

CentOS 7運(yùn)行.sh腳本提示syntax error: unexpected end of file。腳本是通過(guò)本地電腦的notepad++編輯之后用ftp上傳到CentOS 7服務(wù)器上的。

錯(cuò)誤原因:

shell腳本在本地電腦編輯的,格式是dos(可以用vi編輯該shell腳本,進(jìn)入命令行模式,輸入:set ff 回車即可看到左下角顯示fileformat=dos),在dos/window下按一次回車鍵實(shí)際上輸入的是“回車(CR)”和“換行(LF)”,而Linux/unix下按一次回車鍵只輸入“換行(LF)”,所以本地修改的sh文件在CentOS上運(yùn)行每行都會(huì)多了一個(gè)CR,因此就會(huì)報(bào)錯(cuò)syntax error: unexpected end of file。

解決方法:

解決方法很簡(jiǎn)單,用vi編輯器打開(kāi)該shell腳本,進(jìn)入命令行模式(CTRL+C),輸入:set ff=unix之后wq保存退出即可。這時(shí)如果再通過(guò)set ff查看會(huì)發(fā)現(xiàn)fileformat=unix。

下面是其他網(wǎng)友的補(bǔ)充

我們?cè)诰庉婰inux服務(wù)器上的文件時(shí),如果直接在Linux環(huán)境下編輯的話,比較麻煩,大段粘貼格式比較亂,還得自己一行一行去調(diào)整,因此會(huì)選擇用編輯器來(lái)編輯我們Linux環(huán)境下的文件,我用的是NodePad++,大家可以參考這篇http://kemok4.com/softjc/712049.html來(lái)學(xué)習(xí)如何使用NodePad++來(lái)編輯Linux系統(tǒng)的文件。

       今天我要說(shuō)的重點(diǎn)是,我們?cè)谟肗odePad++編輯完腳本文件并上傳到服務(wù)器后,直接運(yùn)行腳本報(bào)錯(cuò)的問(wèn)題,比如我要在NodePad++編輯器中編輯下面這段腳本

#!/bin/sh
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then
	/usr/local/nginx/sbin/nginx
	sleep 2
	if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
		killall keepalived
	fi
fi

先來(lái)說(shuō)說(shuō)第一個(gè)錯(cuò)誤:syntax error: unexpected end of file,大家可以把上面那段腳本內(nèi)容放到腳本文件nginx_check.sh當(dāng)中(當(dāng)然大家可以隨便起個(gè)名字,后綴是.sh就可以了),需要注意的是最后一個(gè)"fi",默認(rèn)是黑色字體,我們敲回車增加一行,這時(shí)最后那個(gè)"fi"顏色就變成藍(lán)色了,如下圖所示。

CentOS7運(yùn)行.sh腳本提示syntax error: unexpected end of file怎么辦 

編輯完該腳本我們保存,自動(dòng)就會(huì)上傳到Linux服務(wù)器,下面我們便在Linux服務(wù)器執(zhí)行該腳本(需要注意的是,該腳本文件一定要有執(zhí)行權(quán)限,如果沒(méi)有執(zhí)行權(quán)限就使用chmod +x nginx_check.sh來(lái)給腳本增加執(zhí)行權(quán)限),我們會(huì)看到如下所示的錯(cuò)誤,提示結(jié)尾不合法。

[root@bhz004 keepalived]# sh ./nginx_check.sh
./nginx_check.sh: line 10: syntax error: unexpected end of file
[root@bhz004 keepalived]#

我們?cè)賮?lái)看另外一個(gè)錯(cuò)誤:syntax error near unexpected token `fi',大家可以直接把腳本內(nèi)容粘貼到腳本文件中,最后一個(gè)"fi"此時(shí)是黑色的,我們不用管它。

CentOS7運(yùn)行.sh腳本提示syntax error: unexpected end of file怎么辦

這時(shí)我們執(zhí)行該腳本,會(huì)看到如下所示錯(cuò)誤,提示第9行"fi"有問(wèn)題。

[root@bhz004 keepalived]# sh ./nginx_check.sh 
./nginx_check.sh: line 9: syntax error near unexpected token `fi'
./nginx_check.sh: line 9: `fi'
[root@bhz004 keepalived]#

上面兩個(gè)問(wèn)題都是由于.sh文件的格式為dos格式。而linux只能執(zhí)行格式為unix格式的腳本。因?yàn)樵赿os/window下按一次回車鍵實(shí)際上輸入的是“回車(CR)”和“換行(LF)”,而Linux/unix下按一次回車鍵只輸入“換行(LF)”,所以修改的sh文件在每行都會(huì)多了一個(gè)CR,所以Linux下運(yùn)行時(shí)就會(huì)報(bào)錯(cuò)找不到命令。
        我們可以查看該腳本文件的格式,方法是使用命令:vim nginx_check.sh進(jìn)入編輯文件界面,如下圖所示。

CentOS7運(yùn)行.sh腳本提示syntax error: unexpected end of file怎么辦

直接輸入":",然后在":"之后輸入"set ff"如下圖所示

CentOS7運(yùn)行.sh腳本提示syntax error: unexpected end of file怎么辦

回車即可看到腳本格式,如下圖所示,可以看到當(dāng)前腳本格式是dos。

CentOS7運(yùn)行.sh腳本提示syntax error: unexpected end of file怎么辦

我們需要把格式改為unix,方法是輸入":set ff=unix",也可以輸入":set fileformat=unix"如下圖所示。

CentOS7運(yùn)行.sh腳本提示syntax error: unexpected end of file怎么辦

輸入完之后,回車即可完成切換格式。然后我們?cè)佥斎?quot;:set ff"來(lái)查看格式,如下圖所示,可以看到當(dāng)前腳本格式變成了我們想要的"unix"了。

CentOS7運(yùn)行.sh腳本提示syntax error: unexpected end of file怎么辦

這時(shí)我們?cè)賵?zhí)行nginx_check.sh就沒(méi)問(wèn)題了,如下所示。

[root@bhz004 keepalived]# sh ./nginx_check.sh 
[root@bhz004 keepalived]# ps -ef | grep nginx
root    3679   1 0 19:42 ?    00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nobody   3681  3679 0 19:42 ?    00:00:00 nginx: worker process   
root    3711  1898 0 20:23 pts/0  00:00:00 grep nginx
[root@bhz004 keepalived]#

看完了這篇文章,相信你對(duì)“CentOS7運(yùn)行.sh腳本提示syntax error: unexpected end of file怎么辦”有了一定的了解,如果想了解更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI