shell 腳本 [: -ge/-le/=/... : unary operator expected (standard_in) 1: syntax error 報錯


在寫腳本的時候出現了語法錯誤,但運行結果正確。

腳本中報錯的行為:

for (( i=0; i<=$line1; i=i+1 ))
do
if [ $(echo "${R12S[i]} < 3" |bc) -eq 1 ] && [ $(echo "${R23S[i]} > 3"|bc) -eq 1 ]\
&& [ $(echo "${R13S[i]} > 3"|bc) -eq 1 ]; then
P1=P1+1
elif [ $(echo "${R12S[i]} > 3" |bc) -eq 1 ] && [ $(echo "${R23S[i]} > 3" |bc) -eq 1 ]\
&& [ $(echo "${R13S[i]} < 3"|bc) -eq 1 ]; then
P2=P2+1
elif [ $(echo "${R12S[i]} > 3" |bc) -eq 1 ] && [ $(echo "${R23S[i]} < 3" |bc) -eq 1 ]\
&& [ $(echo "${R13S[i]} > 3" |bc) -eq 1 ]; then
P3=P3+1
elif [ $(echo "${R12S[i]} > 3" |bc) -eq 1 ] && [ $(echo "${R23S[i]} > 3" |bc) -eq 1 ]\
&& [ $(echo "${R13S[i]} > 3" |bc) -eq 1 ]; then
P4=P4+1
fi
done

報錯如下:

(standard_in) 1: syntax error
path.sh: line 84: [: -eq: unary operator expected
(standard_in) 1: syntax error
path.sh: line 87: [: -eq: unary operator expected
(standard_in) 1: syntax error
path.sh: line 90: [: -eq: unary operator expected
(standard_in) 1: syntax error
path.sh: line 93: [: -eq: unary operator expected

用sh -c path.sh命令查詢腳本內的語法 是否有錯誤

然而並無錯誤,說明腳本本身是沒有問題的,問題應該出在運行的時候

百度了一下報錯 [: -eq: unary operator expected 的原因,有網友說是因為if后的條件要加雙重[ ],即[[ ]]。

於是把所有的條件語句作了修改,但依然報錯

(standard_in) 1: syntax error

(standard_in) 1: syntax error

(standard_in) 1: syntax error

(standard_in) 1: syntax error

后面才發現是循環的問題

for (( i=0; i<=$line1; i=i+1 ))這一個循環是從0開始,到$line1結束,相當於循環了$line1+1次,

然而數組中總共只有$line1個數,故缺失了一個數,所以會出現錯誤,這也印證了為什么運行結果是正確的,因為最后一個數為空不會對前面的數造成影響。

修改:將for (( i=0; i<=$line1; i=i+1 ))改為for (( i=0; i<=$line1-1; i=i+1 )),再次運行便無報錯信息。

再查了一下資料發現有很多人都遇到果這種類型的報錯:

[: -ge/-le/=/... : unary operator expected 錯誤

錯誤原因:

由於變量rate初始化賦值為空,那么就成了 [  -ge "10"] 了,顯然 [ 和 "10" 不相比較並且缺少了 [ 符號,所以報了這樣的錯誤。

解決辦法:

1、檢查是否因為賦值語句寫錯而導致賦值為空

2、賦值前加declare -i rate=0

3、改成 if [[ $rate -ge 10 ]]  再加一對 []


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM