《LINUX實(shí)戰(zhàn):syntax error near unexpected token 腳本報(bào)錯(cuò)誤解決》要點(diǎn):
本文介紹了LINUX實(shí)戰(zhàn):syntax error near unexpected token 腳本報(bào)錯(cuò)誤解決,希望對(duì)您有用。如果有疑問,可以聯(lián)系我們。
向朋友要了一個(gè)Shell腳原來在Linux試用,發(fā)現(xiàn)執(zhí)行時(shí)就報(bào)錯(cuò):syntax error near unexpected token,仔細(xì)查找了還是沒找到錯(cuò)誤,后來發(fā)現(xiàn)腳本內(nèi)容每行尾行都添加了^M的字符,查看方式:vi -b 打開腳本文件
后來想了下,造成這個(gè)的原因應(yīng)該是腳本有試過拿到Win機(jī)器上存放,期間也用Win下的編纂器編纂過.
如今簡(jiǎn)單整理如下:
使用vim -b敕令查看文件內(nèi)容如下:
每一行多了一個(gè)^M有木有?
那么接下來就要搞清晰這個(gè)^M是什么東東?
long long long ago .....? 老式的電傳打字機(jī)使用兩個(gè)字符來另起新行.一個(gè)字符把滑動(dòng)架移回首位 (稱為回車,<CR>,ASCII碼為0D),另一個(gè)字符把紙上移一行 (稱為換行, <LF>,ASCII碼為0A).當(dāng)計(jì)算機(jī)問世以后,存儲(chǔ)器曾經(jīng)非常昂貴.有些人就認(rèn)定沒需要用兩個(gè)字符來表示行尾.UNIX 開發(fā)者決定他們可以用 一個(gè)字符來表示行尾,Linux沿襲Unix,也是<LF>.Apple 開發(fā)者規(guī)定了用<CR>.開發(fā) MS-DOS以及Windows 的那些家伙則決定沿用老式的<CR><LF>.
因?yàn)镸S-DOS及Windows是回車+換行來表現(xiàn)換行,因此在Linux下用Vim查看在Windows下用VC寫的代碼,行尾后的“^M”符號(hào),表現(xiàn)的是換行符.
基本解決辦法有三個(gè):
1.用vim編纂器替換
vim -b filename
在敕令模式下執(zhí)行%s/^M//g進(jìn)行替換
注意:上述敕令行中的“^M”符,不是“^”再加上“M”,而是由“Ctrl+v”、“Ctrl+M”鍵生成的.
2.使用dos2unix敕令進(jìn)行轉(zhuǎn)換
Dos2unix在有些版本的體系中默認(rèn)是安裝的.
在Linux中,文本文件用"\n"表現(xiàn)回車換行,而Windows用"\r\n"表現(xiàn)回車換行.所以在Linux中使用Windows的文本文件常常會(huì)出現(xiàn)錯(cuò)誤.為了避免這種錯(cuò)誤,Linux提供了兩種文本格式相互轉(zhuǎn)化的命令:dos2unix和unix2dos,dos2unix把"\r\n"轉(zhuǎn)化成"\n",unix2dos把"\n"轉(zhuǎn)化成"\r\n".
命令dos2unix和unix2dos的使用異常簡(jiǎn)單,格式為:dos2unix filename
假如想了解更多,可以查看手冊(cè).man dos2unix
3.使用文本處置工具
cat filename | tr -d "/r" > newfile 去失落^M生成一個(gè)新文件.
同樣還有sed敕令等,凡是可以替換的敕令都是可以用來新生成一個(gè)文件的.
另外,在上傳到Linux平臺(tái)過程中,可以選擇上傳類型為二進(jìn)制,也可以避免此問題,年夜家可以試一下
本文永遠(yuǎn)更新鏈接地址:
維易PHP培訓(xùn)學(xué)院每天發(fā)布《LINUX實(shí)戰(zhàn):syntax error near unexpected token 腳本報(bào)錯(cuò)誤解決》等實(shí)戰(zhàn)技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培養(yǎng)人才。
轉(zhuǎn)載請(qǐng)注明本頁網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/12079.html