当前位置:首页 > 服务端 > shell 脚本 [: -ge/-le/=/... : unary operator expected (standard_in) 1: syntax error 报错

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 ]]  再加一对 []

作者:不想当研究僧
来源链接:https://www.cnblogs.com/zhutouli/p/12124017.html

版权声明:
1、Java侠(https://www.javaxia.com)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。





本文链接:https://www.javaxia.com/server/124755.html

标签: syntax error
分享给朋友:

“shell 脚本 [: -ge/-le/=/... : unary operator expected (standard_in) 1: syntax error 报错” 的相关文章

pycharm安装教程,超详细2022年05月16日 21:28:02
[Multimedia][TS]TS流的解析2022年05月17日 20:41:26
MySQL安装之yum安装2022年05月19日 19:54:29
centos7中 yum的安装2022年05月19日 19:54:29
集成极光推送遇到的问题2022年05月21日 21:05:48
学习go语言国内最全资料链接2022年05月23日 21:27:32
信息系统项目干系人管理2022年05月24日 20:43:17
从0到1入门Serverless2022年05月28日 23:26:27
OpenHarmony的介绍2022年05月29日 20:39:16