在寫腳本的時候出現了語法錯誤,但運行結果正確。
腳本中報錯的行為:
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 ]] 再加一對 []