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都支持雙方括號!
相關文章
相關標籤/搜索