1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > shell脚本中if判断语句报错[: 参数太多

shell脚本中if判断语句报错[: 参数太多

时间:2021-10-28 06:47:49

相关推荐

shell脚本中if判断语句报错[: 参数太多

今天在写脚本的时候碰到一个这样的问题,为了研究一下我把原来的代码改成简单的,大体上没有变化,报错也一样,代码如下:

#!/bin/bashread -p "输入四个参数:" a b c dif [ -z ${a} -o -z ${b} -o -z ${c} -o -z ${d} ];thenecho -e "\033[1;4;31m"输入四个参数,如:18415 082801 18456 4"\033[0m"exit 4fiecho $a $b $c $d

我运行脚本会报如下图的错误:

Shell 脚本中的"[: too many arguments"错误与我这个错误时一样的,只是中英文区别

在网上查看下,Shell 脚本中的"[: too many arguments"错误跟我这个

如图,为了触发判断,我没有输入任何参数,直接看代码的话感觉逻辑也没有什么问题,但是为什么会报错呢?

后来经过几次调试测试,终于发现了原因:

先看调试过程,如下图:

可以看到红色方框内变量的值全为空值,这个空值没有范围,这时候它们之间的空格迷惑了bash,会让bash认为每一个变量都有多个空值,而每一个变量的值都是跟一个值-z做比较,所以会报上图的错误,参数太多

解决办法:

一:可以给每一个变量加上双引号,给变量的值界定范围,这样就可以保证变量的值只有一个,不会引起bash的误会

#!/bin/bashread -p "输入四个参数:" a b c dif [ -z "${a}" -o -z "${b}" -o -z "${c}" -o -z "${d}" ];thenecho -e "\033[1;4;31m"输入四个参数,如:18415 082801 18456 4"\033[0m"exit 4fiecho $a $b $c $d

再次运行脚本结果如下:

二:可以在每个变量的前面加上一个x,可以保证输入的字符串不为空那就是一个值,也不会引起bash的误会,这样也可以使我这个脚本不报错,但是这个办法在我这个脚本里面并不是很合适,因为这样会导致我的脚本输入的值没有空值,与本意相违背,代码如下:

#!/bin/bashread -p "输入四个参数:" a b c dif [ -z x${a} -o -z x${b} -o -z x${c} -o -z x${d} ];thenecho -e "\033[1;4;31m"输入四个参数,如:18415 082801 18456 4"\033[0m"exit 4fiecho $a $b $c $d

再次运行脚本结果如下:

这时候脚本输出的变量的值就是空值,不会再有之前的报错

大多数时候出现参数过多这种报错都可以尝试这两种办法,出现这样的报错也可能是[ ]和[[ ]]的使用导致,还有其他的原因,欢迎评论分享与指正我的理解,谢谢!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。