溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-07-21 07:32:29 來源:網絡 閱讀:1270 作者:Runs_ 欄目:開發技術

shell腳本編程:

shell腳本的內容和格式:

首行,絕對行首,shebang(解釋器程序的絕對路徑)

注釋信息:以#占據絕對行首的行;

為了能在程序中突出程序的功能,適當的添加空白行,以分隔不同功能的源代碼塊;

有一定的縮進    

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

   +

   —

   *

   /

   % 模運算 取余

   **|^ 乘方

   增強型算術運算符號:

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

   -=

   /=

   *=

   %=

   特殊的增強型算術運算:

   B=B+1  B+=1  B++


   算數運算方法:

     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:被測試的兩個數值左邊的是否小于等于右邊的,小于等于為真,大于為假

             例:

                test 整數1 –eq 整數2          整數相等

                test 整數1 –ge 整數2          整數1大于等于整數2

                test 整數1 –gt 整數2          整數1大于整數2

                test 整數1 –le 整數2          整數1小于等于整數2

                test 整數1 –lt 整數2          整數1小于整數2

                test 整數1 –ne 整數2          整數1不等于整數2


       2.字符串測試

         雙目操作符:

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

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

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

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

               注意:大于號和小于號必須用在`EXPRESSION`

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

              例:

                 str1 = str2 檢查str1是否和str2相同 

                 str1 != str2 檢查str1是否和str2不同 

                 str1 > str2 檢查str1是否比str2大

                 str1 < str2 檢查str1是否比str2小 

                 str1 =~ str2 檢查str1是否能被str2的PATTERN匹配  


         單目操作符:

           -z "STRING" :判斷指定的字符串是否為空串,空為真,不空為假。

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

              例:

                 -z str1 檢查str1的長度是否為0 

                 -n str1 檢查str1的長度是否非0 

              注意:

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

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

              3.表達式的兩端以及操作符的兩端都要有空格


       3.文件狀態測試

         單目測試:

         文件的存在性測試:如果被測試的文件存在則為真,不存在則為假。

           -a|-e

            [-e /backup]

         

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

           -b FILE:被測試的文件是否存在并且是否為塊設備,存在且為塊設備為真,否則為假。

           -c FILE:被測試的文件是否存在并且是否為字符設備……

           -d FILE:被測試的文件是否存在并且是否為目錄文件……

           -f FILE:被測試的文件是否存在并且是否為普通文件……

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

           -p FILE:被測試的文件是否存在并且是否為管道文件……

           -S FILE:被測試的文件是否存在并且是否套接字文件……

         

         文件的訪問權限測試:

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

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

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

             例:

             對于目錄/tmp/testdir1,如果當前有效用戶有讀、寫和執行的權限,那么就在該目錄中創建一個文件;否則,顯示“沒有權限不能創建文件”的信息。

             test -r /tmp/testdir1 -a -w /tmp/testdir1 -a -x /tmp/testdir1 && touch FILENAME /tmp/testdir1 || echo

         

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

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

           -g FILE:被測試的文件是否存在并且是否設置了GUID權限,……

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


         文件的所有權測試:

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

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


         文件內容是否為空:

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


         時間戳測試:

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


          雙目測試:

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

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

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


      注意:在使用"["簡寫test時,左中括號后面的空格和右括號前面的空格是必需的,如果沒有

          空格,Shell不可能辨別表達式何時開始何時結束.

          也就是說test option file可以全部改寫成:[ option file ]

          例如:

              test –w File

          改寫成    

              [ –w File ]    


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

          第一種表達方式:

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

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

           ![ -o/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后面的所有命令不再執行


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女