shell編程時出現(xiàn):未預(yù)期的符號?`then'?附近有語法錯誤?或者?:?行?:?`then'問題
未預(yù)期的符號 `then' 附近有語法錯誤: 行 : `then'` if [ -f $i ];then'未預(yù)期的符號 `done' 附近有語法錯誤
#!/bin/bash cd /var/log sum=0 for i in `ls -r *` do ??????? if [ -f $i ];then ??????? let sum++ ??????? echo "文件名:$i" ??????? fi done echo "總文件數(shù)量為:$sum"
上面的代碼看起來是一點問題都沒有,但是一旦復(fù)制粘貼到linux里面運行就會出現(xiàn)各種奇奇怪怪的問題,如下:
test.sh: 行 6: 未預(yù)期的符號 `then' 附近有語法錯誤
test.sh: 行 6: ` if [ -f $i ];then'
test.sh: 行 10: 未預(yù)期的符號 `done' 附近有語法錯誤
test.sh: 行 10: `done'
上面的錯誤信息著實是把我給整蒙了,還好我還是相信計算機的嚴(yán)謹(jǐn),認(rèn)真看了一下報錯信息,發(fā)現(xiàn)都是then 或者 done的前面出現(xiàn)了一個反引號,非常奇怪,明明我們就沒寫過反引號進去。
查找了不少資料,最后查到是Windows和linux系統(tǒng)的環(huán)境不一樣導(dǎo)致的,解決方式非常簡單粗暴,就是在linux里面刪除對應(yīng)的代碼重新一個一個敲就好,還有另一個方法是用notepad++里面設(shè)置linux環(huán)境,這個請讀者自行驗證。
下面看看我的解決過程:
出現(xiàn)如下錯誤
把then那行dd刪除,整行重新輸入,出現(xiàn)新的錯誤,如下:
把done那行刪除,發(fā)現(xiàn)沒用,還是報錯,想到done是在一行起始處(并且反引號在done前面),有理由懷疑是上一行的原因,把上一行刪掉重寫(就是 fi),成功通過,如下:
上面只要用sudo運行即可
綜上,找了好久都沒找到原因,因為代碼本來就是對的,只是我懶,直接copy進linux里面運行(誰知道會不兼容呢),所以還是得一個一個敲的穩(wěn)妥。
到此這篇關(guān)于shell編程時出現(xiàn):未預(yù)期的符號 `then' 附近有語法錯誤 或者 : 行 : `then'的文章就介紹到這了,更多相關(guān)shell未預(yù)期的符號 `then' 附近有語法錯誤內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Shell中使用plink工具實現(xiàn)遠(yuǎn)程批量關(guān)機
這篇文章主要介紹了Shell中使用plink工具實現(xiàn)遠(yuǎn)程批量關(guān)機,Plink 是命令行工具,執(zhí)行遠(yuǎn)程服務(wù)器上的命令,需要的朋友可以參考下2014-12-12Linux中實現(xiàn)非登錄系統(tǒng)用戶執(zhí)行命令的方法
Linux系統(tǒng)中,管理員經(jīng)常需要通過一個無法登錄shell的系統(tǒng)用戶來執(zhí)行特定的命令,這種需求在管理多用戶系統(tǒng)或自動化任務(wù)時尤為常見,下面,我們將詳細(xì)講解如何實現(xiàn)這一需求,并深入分析其背后的原理,需要的朋友可以參考下2024-01-01