shell if条件判断中:双中括号与单中括号的区别

  电脑重装了系统,登陆虚拟机的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

  还有就是关于双中括号:字符串

  • 双方括号提供了字符串比较的高级特性。
  • 括号中能够定义一些正则表达式来匹配字符串
  • 注意不是全部的shell都支持双方括号!
相关文章
相关标签/搜索