bash的算術運算和條件測試方法

利用bash腳本編程實現算數運算:

 

                     +,_,*,/

                     %:模運算,取餘數

                     **|^s

                     增強型的算數運算符號:

 

                      +=

                      _=

 

                      *=

                      /=

                      %=

                      特殊的增強型算數運算:

                      let B=B+1

                      let B=B-1

 

                      B++:現將B的值賦給其他變量,再自身加1

                      ++B:先加1,再賦值出去

 

ae

 

                     算數運算方法:

                       1,let VAR=算數表達式  (將算數表達式先進性算術運算,並將運算得到的結果保存到變量VAR中)

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

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

                             SUM=$[C+B]相當於SUM=$[$C+$B]

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

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

                       4,expr ARGU1 ARGU2 ARGU3

                            ARGU1和ARGU3必須是數值

                            ARGU2必須是運算符號

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

 

                       注意:*號,在某些情況下,需要轉義

 

                            

                      變量:

                        弱變量:弱類型變量,字符型,數值型(不包括浮點型)

 

 

                      條件測試命令:

                      test EXPRESSION:

                        shell內建命令:

                      [EXPRESSION]:

                        外部命令:

 

                      `EXPRESSION`:

                        bash的內部關鍵字:

 

                        注意:這類命令一般沒有執行結果,只有執行狀態返回值;

 

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

 

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

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

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

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

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

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

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

 

                            例子:~/aaa的大小是否小於1000字節

 

                          2,字符串測試

                            雙目操作符:

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

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

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

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

 

                               注意:<和>必須用在`EXPRESSION`中

 

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

                            單目操作符:

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

                               -n"STRING":判斷指定字符串是否爲非空字符串,非空爲真,空爲假

 

                              注意:

                               1, 通常情況下,字符串要加引號,單引號雙引號都行,根據實際情況選擇;

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

                               3,表達式兩端和操作符兩端都應有空格;

 

                          3,文件狀態測試

 

                          單目測試:

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

                               -a|-e

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

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

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

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

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

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

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

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

 

                              3,文件的訪問權限測試:

 

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

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

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

 

 

                               4,文件的特殊權限標識測試:

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

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

                               -k FILE:被測試的文件是否存在並且是否設置了STICKY權限

 

                               5,文件的所有權測試:

 

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

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

 

                               6,文件內容是否爲空測試:

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

 

                               7,時間戳測試:

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

 

 

                               雙目測試:

 

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

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

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

 

 

                               測試語句中可以添加邏輯運算:

                                  第一種表達方式:

 

                                 [-O /tmp/test] && [ -s /tmp/test]

                                 [-O /tmp/test] || [ -s /tmp/test]

 

                                 第二種表達方式:

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

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

                                   [! -O /tmp/test]

 

 

                                 命令的執行結果:

 

                                   正常的輸出結果:

 

                                   命令的執行狀態返回值:

                                   0-255

                                   0:表示執行成功

                                   1,2,127 :系統保留的

                                   3-126 128-255:用戶自定義的執行狀態返回值

 

                                   exit [#]

                                     退出當前shell登錄

 

                                       shell腳本運行時,一旦遇到exit命令,將立即結束當前shell進程,同時腳本的運行也將被停止,即exit後面的命令都不再被解釋執行;


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