電腦重裝了系統,登陸虛擬機的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
還有就是關於雙中括號:字符串