天天看點

shell中let和(())、[]、test、[[]]差別

一、let與(()) 在shell程式設計中是可以互換的,它們讓我們可以像C語言那樣寫程式對于變量運算指派。在循環語句中控制變量變化非常有用;

注:

1、使用(())時,運算符兩邊需要有空格;

2、(())算數表達式的值在if和while判斷時不用在前面加“$”;在echo輸出值時需要加"$"

[root@zq-crmtest-20423tmp]# echo $((c = a + b +  1))

輸出4

3、let和(())都隻能對整數進行運算指派;

4、使用let或(())指派時,也可以使用expr+老闆鍵代替;(如下,二者等價)

letllines=$llines+$fileLines

llines=`expr $llines+ $fileLines`

執行個體:

[root@zq-crmtest-20423tmp]# a=1

[root@zq-crmtest-20423tmp]# b=2

[root@zq-crmtest-20423tmp]# let c=a+b

[root@zq-crmtest-20423tmp]# echo $c

輸出3

[root@zq-crmtest-20423tmp]# let a=1*111

[root@zq-crmtest-20423tmp]# echo $a

輸出111

[root@zq-crmtest-20423tmp]# ((c = a + b))

[root@zq-crmtest-20423tmp]# echo $c

輸出3

$ x=12

$ let "x<10"   

$ echo $?

1

$ (( x > 10 ))

$ echo $?

$if ((x > 10 ))

>then echo x greater

>else echo x not greater

>fi

二、shell能夠識别的表達式如下所示:

操作符     描述

-        減去

!        邏輯相反

* / %      乘,除,餘數

+ -       加,減

<=  >= < > 關系比較

== !=      等于不等于

=        指派

括号能夠被用作改變表達式中計算的順序。當使用邏輯和關系操作符,(!,<=,>=,<,>,++,~=),的時候,shell會傳回一個代碼變量,$?會反映結果是真還是假;再一次說明,必須使用雙引号來防止shell将大于和小于運算符當作I/O重定向。

一、先說[]和test,兩者是一樣的,在指令行裡test expr1和[ expr1 ]的效果相同。他們的三個基本作用是判斷檔案、判斷字元串、判斷整數。支援使用與或非将表達式連接配接起來。要注意的有:

1.test和[]中可用的比較運算符隻有==和!=,兩者都是用于字元串比較的,不可用于整數比較,整數比較隻能使用-eq, -gt這種形式。

2.論是字元串比較還是整數比較都千萬不要使用大于号小于号。當然,如果你實在想用也是可以的,對于字元串比較可以使用尖括号的轉義形式,如果比較"ab"和"bc":[ ab \< bc ],結果為真,也就是傳回狀态為0。

3. test和[]中的邏輯運算與或非隻能使用-a、-o、!

執行個體:

if  [ $a=="abc"  ]  ;then

fi

if test $var1 ="1"-a $var2 = "2" ; then

  echo "equal"

fi

if [  $var1= "1"-a $var2 = "2"  ] ; then

  echo "equal"

fi

二、[[ ]]是内置在shell中的一個指令,它就比剛才說的test強大的多了。簡直強大的令人發指!

1.支援字元串的模式比對(使用=~操作符時甚至支援shell的正則表達 式)。邏輯組合可以不使用test的-a,-o而使用&&,||這樣更親切的形式(針對c、Java程式員)。

2.字元串比較時可以把右邊的作為一個模式(這是右邊的字元串不加雙引号的情況下。如果右邊的字元串加了雙引号,則認為是一個文本字元串。),而不僅僅是一個字元串,比如[[ hello == hell? ]],結果為真。

shell中let和(())、[]、test、[[]]差別

注:使用[]和[[]]的時候不要吝啬空格,每一項兩邊都要有空格。

執行個體:

[[ $a == z* ]]    # 如果$a以"z"開頭(模式比對)那麼将為true

[[$a == "z*" ]]   #如果$a等于z*(字元比對),那麼結果為true

[ $a == "z*" ]  和   [ $a == z* ]  # 效果一樣,如果$a等于z*(字元比對),那麼結果為true

!=   不等于,如:if [ "$a" != "$b" ]

     這個操作符将在[[]]結構中使用模式比對.

<      小于,在ASCII字母順序下.如:

     if [[ "$a" < "$b" ]]

     if [ "$a" \< "$b" ]

 注:在[]結構中"<"需要被轉義.

-z      字元串為"null".就是長度為0.

-n      字元串不為"null"

繼續閱讀