bash的算術運算和條件測試語句

這篇博客我們來學習一下利用bash腳本編程實現算術運算

最基本的算術運算包括+、-、*、/、%(模運算,取餘數)、**|^(乘方,不同環境下表示方法不一樣)


計算機爲我們提供了增強型的運算符號

+=:let B=B+2 --> let B+=2

-=:let B=B-2 --> let B-=2

*=:let B=B*2 --> let B*=2

/=:let B=B/2 --> let B/=2

%=:let B=B%2 --> let B%=2


除了基本的增強型運算符號,還有兩個比較特殊的增強型運算符號自加和自減


let B=B+1 --> let B+=1 --> B++

let B=B-1 --> let B-=1 --> B--


接着我們區別一下B++和++B


B++:先將B的值付給變量,然後再將自身+1

++B:先做自身+1運算,然後再將自身的值賦給其他變量


下面介紹幾種算數運算的方法

1.let VAR=算數表達式

     將算數表達式先進行算術運算並將運算得到的結果保存到變量VAR中

2.VAR=$[算數表達式]

     算數表達式中如果有變量表達式,可以使用$引用,也可以省略$

     sum=$[$c+$b]

     sum=$[a+b]

3.VAR=$((算數表達式))  

     算數表達式中如果有變量表達式,可以使用$引用,也可以省略$

4.expr ARGU1 ARGU2 ARGU3

      ARGU1和ARGU3必須是數值

      ARGU2必須是運算符號

5.echo “算數表達式” | bc

   


說完基本的算數運算,下面來說一下基本的測試命令,這類命令一般沒有執行結果只有執行狀態返回值。


tset測試命令有三類測試表達式:

 1.數值測試:雙目操作符

     -eq:被測試的兩個數值是否相等,相等爲真,不等爲假

     -ne:被測試的兩個數值是否不等,不等爲真,相等爲假

     -gt:被測試的兩個數值,左邊的是否大於右邊的,大於爲真,不大於爲假

     -lt:被測試的兩個數值,左邊的是否小於右邊的,小於爲真,不小於爲假

     -ge:被測試的兩個數值,左邊的是否大於等於右邊的,大於等於爲真,小於爲假

     -ge:被測試的兩個數值,左邊的是否小於等於右邊的,小於等於爲真,大於爲假


   2.字符串測試

     雙目操作符:

       ==|= :表示被測試的兩個字符串是否相同,相同爲真,不同爲假

       != :表示被測試的兩個字符串是否不相同,不相同爲真,相同爲假

       > :被測試的兩個字符串,在ASCII碼錶中對應的二進制數值,左邊是否大於右邊,大於爲真,小於爲假

       < :被測試的兩個字符串,在ASCII碼錶中對應的二進制數值,左邊是否小於右邊,小於爲真,大於爲假


         注意:>和<必須用在`EXPRESSION`測試語句中

       =~ :被測試的兩個字符串,左側字符串能否被右側的PATTERN匹配,能匹配爲真,不能匹配爲假



     單目操作符:

       -z 'STRING':判斷指定的字符串是否爲空串,空爲真,不空爲假

       -n 'STRING';判斷指定的字符串是否爲非空串,不空爲真,空爲假


       注意:1.通常情況下,字符串要加引號單引號或雙引號都行,根據實際情況選擇即可

             2.[[]]和[]在某些情況下,可能意義不同,要區分使用

             3.表達式兩端和操作符的兩端都要加空格


   3.文件狀態測試

      1.文件存在性測試:如果被測試的文件存在則爲真,不存在則爲假

      -a | -e

      [ -e /backup ]


      2.文件類型測試(先測試存在性):

      -b FILE:被測試的文件是否存在並且是否爲塊設備,存在且爲塊設備,否則爲假

      -c FILE:被測試的文件是否存在並且是否爲字符設備,存在且爲字符設備,否則爲假

      -d FILE:被測試的文件是否存在並且是否爲目錄文件,存在且爲目錄文件,否則爲假

      -f FILE:被測試的文件是否存在並且是否爲普通文件,存在且爲普通文件,否則爲假

      -h|-L FILE:被測試的文件是否存在並且是否爲符號鏈接文件,存在且爲符號鏈接文件,否則爲假

      -p FILE:被測試的文件是否存在並且是否爲管道文件,存在且爲管道文件,否則爲假

      -s FILE:被測試的文件是否存在並且是否爲套接字文件,存在且爲套接字,否則爲假



      文件的訪問權限測試:

     -r FILE:被測試的文件是否存在並且當前有效用戶是否可讀,文件存在並且當前有效用戶可讀爲真,否則爲假

     -w FILE:被測試的文件是否存在並且當前有效用戶是否可寫,文件存在並且當前有效用戶可寫爲真,否則爲假

     -x FILE:被測試的文件是否存在並且當前有效用戶是否可執行,文件存在並且當前有效用戶可執行爲真,否則爲假


     文件的特殊權限表示測試:

     -u:FILE:被測試的文件是否存在並且是否設置了SUID權限,文件存在且設置了SUID爲真,否則爲假

     -g:FILE:被測試的文件是否存在並且是否設置了SGID權限,文件存在且設置了SGID爲真,否則爲假

     -t:FILE:被測試的文件是否存在並且是否設置了STICKY權限,文件存在且設置了STICKY爲真,否則爲假


     文件的所有權測試:

     -O FILE:被測試的文件是否存在並且其屬主是否爲當前有效用戶,文件存在且屬主是當前有效用戶爲真,否則爲假

     -G FILE:被測試的文件是否存在並且其屬組是否爲當前有效用戶的組,文件存在且屬組是當前有效用戶的組爲真,否則爲假


     文件內容是否爲空:

     -s FILE:被測試的文件是否存在且內容不爲空,存在且內容不空爲真,內容空爲假


     時間段測試:

     -N:被測試的文件自從上一次被修改之後,是否被修改過


     雙目測試:

     FILE1 -ef FILE2:測試兩個文件是否指向同一個文件系統的相同inode的硬鏈接


     FILE1 -nt FILE2:被測試的兩個文件,FILE1是否比FILE2更新


     FILE1 -ot FILE2:被測試的兩個文件,FILE1是否比FILE2更舊



除了最基本的測試結構,測試語句中還可以加入邏輯運算

第一種表達方式:

[ -o /tmp/test ] && [ -s /tmp/tset]

[ -o /tmp/test ] || [ -s /tmp/tset]

! [ -o /tmp/test]


第二種表達方式:

[ -o /tmp/test -a -s /tmp/test] 

[ -o /tmp/test -o -s /tmp/test] 

[ ! -o /tmp/test] 


以上介紹的是bash的算數運算和條件測試語句,主要記憶的東西還是很多,學好這些基本的東西對於腳本的編寫用處很大。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章