shell if条件判断中:双中括号与单中括号的区别
Posted 攻城红卫兵
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell if条件判断中:双中括号与单中括号的区别相关的知识,希望对你有一定的参考价值。
电脑重装了系统,登录虚拟机的shell脚本需重写,在为编写的脚本命名时发现存在同名脚本,才想起来是连接公司服务器的登录脚本,不想写俩脚本,怕记混了,那就整合一下。代码如下:
#!/bin/bash
#zxl.sh 脚本名
if [ $1 == 1 ]
then
ssh a.a.a.a
else
ssh b.b.b.b
fi
so easy,运行脚本 ./zxl.sh 1 和 ./zxl.sh 2 成功登录了公司服务器和虚拟机。今天登录的时候,却出问题了。
我今天要登录虚拟机,直接 运行 ./zxl.sh ,我没有加参数,反正不是1,其它参数都给我走else 连接,结果提示我:
./zxl.sh: line 2: [: ==: unary operator expected
[email protected]‘s password:
我就纳闷了,而且重点在 ‘if [ $1 == 1 ]‘ 语句报问题的同时,然后又执行了else语句,输入密码登录成功,但是这影响“市容”啊,改。
问题出现在哪里呢?我首先想到的是 换== 为 -eq,马上否定,再思考一下,我想到shell编程规范,记得用双中括号,更改后,ok。我想知道为什么在没参数时就报错呢,查找了一下, 如下:
如果变量“参数”的值为空,那么就if语句就变成了if [ = 1 ],这不是一个合法的条件。为了避免出现这种情况,我们必须给变量加上引号if [ "$1" == "1" ],这样即使是空变量也提供了合法的测试条件,,if [ " " == "1" ]
还有就是关于双中括号:
- 双方括号提供了字符串比较的高级特性。
- 括号中可以定义一些正则表达式来匹配字符串
- 注意不是所有的shell都支持双方括号!
以上是关于shell if条件判断中:双中括号与单中括号的区别的主要内容,如果未能解决你的问题,请参考以下文章