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都支持雙方括號!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM