码迷,mamicode.com
首页 > 系统相关 > 详细

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

时间:2019-04-17 09:23:16      阅读:643      评论:0      收藏:0      [点我收藏+]

标签:正则表达   避免   查找   expected   高级   password   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
root@b.b.b.b‘s password:

我就纳闷了,而且重点在 ‘if [ $1 == 1 ]‘ 语句报问题的同时,然后又执行了else语句,输入密码登录成功,但是这影响“市容”啊,改。

  问题出现在哪里呢?我首先想到的是  换== 为 -eq,马上否定,再思考一下,我想到shell编程规范,记得用双中括号,更改后,ok。我想知道为什么在没参数时就报错呢,查找了一下, 如下:

  如果变量“参数”的值为空,那么就if语句就变成了if [  = 1 ],这不是一个合法的条件。为了避免出现这种情况,我们必须给变量加上引号if [ "$1" == "1" ],这样即使是空变量也提供了合法的测试条件,,if [  " " == "1"  ]

  还有就是关于双中括号:

  • 双方括号提供了字符串比较的高级特性。
  • 括号中可以定义一些正则表达式来匹配字符串
  • 注意不是所有的shell都支持双方括号!

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

标签:正则表达   避免   查找   expected   高级   password   shell if   提示   参数   

原文地址:https://www.cnblogs.com/z977690557/p/10688856.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!