shell 單括號與雙中括號的區別

2022-01-20 07:49:20 字數 1659 閱讀 6908

出現問題**如下:

#!/bin/bash

#zxl.sh 指令碼名

if [ $1 == 1 ]

then

ssh a.a.a.a

else

ssh b.b.b.b

fiso easy,執行指令碼  ./zxl.sh  1  和  ./zxl.sh  2  成功登入了公司伺服器和虛擬機器。今天登入的時候,卻出問題了。

我今天要登入虛擬機器,直接 執行  ./zxl.sh    ,我沒有加引數,反正不是1,其它引數都給我走else 連線,結果提示我:

./zxl.sh: line 2: [: ==: unary operator expected

[email protected]'s password:

我就納悶了,而且重點在 'if [ $1 == 1 ]' 語句報問題的同時,然後又執行了else語句,輸入密碼登入成功,但是這影響「市容」啊,改。

問題出現在**呢?我首先想到的是  換== 為 -eq,馬上否定,再思考一下,我想到shell程式設計規範,記得用雙中括號,更改後,ok。我想知道為什麼在沒引數時就報錯呢,查詢了一下, 如下:

如果變數「引數」的值為空,那麼就if語句就變成了if [  = 1 ],這不是乙個合法的條件。為了避免出現這種情況,我們必須給變數加上引號if [ "$1" == "1" ],這樣即使是空變數也提供了合法的測試條件,,if [  " " == "1"  ]

新內容補充:

關係運算子只支援數字,不支援字串,除非字串的值是數字。

"fi輸出結果:

it is a test

./pingshi.sh: 第 16 行:[: 18.3: 期待整數表示式

說明:1、當使用上面比較符時,在單括號內,只支援整數

2、  (1) 雙方括號提供了字串比較的高階特性。

(2) 括號中可以定義一些正規表示式來匹配字串

(3) 注意不是所有的shell都支援雙方括號!

雙括號中常用的運算子

特點:

1、在雙括號結構中,所有表示式可以像c語言一樣,如:a++,b--等。

2、在雙括號結構中,所有變數可以不加入:「$」符號字首。

3、雙括號可以進行邏輯運算,四則運算

4、雙括號結構 擴充套件了for,while,if條件測試運算

5、支援多個表示式運算,各個表示式之間用「,」分開

舉例:

row=10

if (( $row ** 2 > 18 ));then

echo "1"

else

echo "it is a test"

fi

結果:1

注:雙括號內,也不能寫小數

Shell 雙括號運用

在剛開始學習inux shell指令碼程式設計時候,對於它的 四則運算以及邏輯運算。估計很多朋友都感覺比較難以接受。特變邏輯運算子 使用時候,必須保證運算子與算數 之間有空格。四則運算也只能借助 let,expr等命令完成。今天講的雙括號 結構語句,就是對shell中算數及賦值運算的擴充套件。使用方...

Shell 雙括號概述

1.比較兩個數的大小 bin bash 定義變數 a 1b 3 方法1,乙個方括號,需要轉義 if a b then echo 方法1 yes else echo 方法1 no fi 方法2,兩個小括號 if a b then echo 方法2 yes else echo 方法2 no fi 方法3...

shell內建命令test單雙括號的區別

1 單括號test命令要對變數進行單詞分離,當變數值包含空白符時,要用引號將變數括起來 而雙括號的test命令不會對變數進行單詞分離。以下情況分為變數為單個單詞,含有空格的片語。root www yujia echo name hello root www yujia name hello root...