未預期的符號 `then' 附近有語法錯誤 : 行 : `then' ` if [ -f $i ];then' 未預期的符號 `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 "總文件數量為:$sum"
上面的代碼看起來是一點問題都沒有,但是一旦複製粘貼到linux裡面運行就會出現各種奇奇怪怪的問題,如下:
test.sh: 行 6: 未預期的符號 `then' 附近有語法錯誤
test.sh: 行 6: ` if [ -f $i ];then'
test.sh: 行 10: 未預期的符號 `done' 附近有語法錯誤
test.sh: 行 10: `done'
上面的錯誤信息著實是把我給整蒙了,還好我還是相信電腦的嚴謹,認真看了一下報錯信息,發現都是then 或者 done的前面出現了一個反引號,非常奇怪,明明我們就沒寫過反引號進去。
查找了不少資料,最後查到是Windows和linux系統的環境不一樣導致的,解決方式非常簡單粗暴,就是在linux裡面刪除對應的代碼重新一個一個敲就好,還有另一個方法是用notepad++裡面設置linux環境,這個請讀者自行驗證。
下麵看看我的解決過程:
出現如下錯誤
把then那行dd刪除,整行重新輸入,出現新的錯誤,如下:
把done那行刪除,發現沒用,還是報錯,想到done是在一行起始處(並且反引號在done前面),有理由懷疑是上一行的原因,把上一行刪掉重寫(就是 fi),成功通過,如下:
上面只要用sudo運行即可
綜上,找了好久都沒找到原因,因為代碼本來就是對的,只是我懶,直接copy進linux裡面運行(誰知道會不相容呢),所以還是得一個一個敲的穩妥,