日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

shell編程時出現:未預期的符號?`then'?附近有語法錯誤?或者?:?行?:?`then'問題_linux shell

作者:wazjr ? 更新時間: 2023-01-12 編程語言

未預期的符號 `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里面運行(誰知道會不兼容呢),所以還是得一個一個敲的穩妥。

原文鏈接:https://www.cnblogs.com/wannacry/archive/2022/12/07/16964566.html

欄目分類
最近更新