電腦重裝了系統,登錄虛擬機的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都支持雙方括號!