电脑重装了系统,登陆虚拟机的shell脚本需重写,在为编写的脚本命名时发现存在同名脚本,才想起来是链接公司服务器的登陆脚本,不想写俩脚本,怕记混了,那就整合一下。代码以下:正则表达式
#!/bin/bash
#zxl.sh 脚本名
if [ $1 == 1 ]
then
ssh a.a.a.a
else
ssh b.b.b.b
fishell
so easy,运行脚本 ./zxl.sh 1 和 ./zxl.sh 2 成功登陆了公司服务器和虚拟机。今天登陆的时候,却出问题了。编程
我今天要登陆虚拟机,直接 运行 ./zxl.sh ,我没有加参数,反正不是1,其它参数都给我走else 链接,结果提示我:bash
./zxl.sh: line 2: [: ==: unary operator expected
root@b.b.b.b's password:服务器
我就纳闷了,并且重点在 'if [ $1 == 1 ]' 语句报问题的同时,而后又执行了else语句,输入密码登陆成功,可是这影响“市容”啊,改。ssh
问题出如今哪里呢?我首先想到的是 换== 为 -eq,立刻否认,再思考一下,我想到shell编程规范,记得用双中括号,更改后,ok。我想知道为何在没参数时就报错呢,查找了一下, 以下:测试
若是变量“参数”的值为空,那么就if语句就变成了if [ = 1 ],这不是一个合法的条件。为了不出现这种状况,咱们必须给变量加上引号if [ "$1" == "1" ],这样即便是空变量也提供了合法的测试条件,,if [ " " == "1" ]spa
还有就是关于双中括号:字符串