溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

bash的算術(shù)運(yùn)算和條件測(cè)試語(yǔ)句

發(fā)布時(shí)間:2020-07-21 07:32:29 來源:網(wǎng)絡(luò) 閱讀:1247 作者:Runs_ 欄目:開發(fā)技術(shù)

shell腳本編程:

shell腳本的內(nèi)容和格式:

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

注釋信息:以#占據(jù)絕對(duì)行首的行;

為了能在程序中突出程序的功能,適當(dāng)?shù)奶砑涌瞻仔?,以分隔不同功能的源代碼塊;

有一定的縮進(jìn)    

   利用bash腳本編程實(shí)現(xiàn)算數(shù)運(yùn)算:

   +

   —

   *

   /

   % 模運(yùn)算 取余

   **|^ 乘方

   增強(qiáng)型算術(shù)運(yùn)算符號(hào):

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

   -=

   /=

   *=

   %=

   特殊的增強(qiáng)型算術(shù)運(yùn)算:

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


   算數(shù)運(yùn)算方法:

     1.let VAR=算數(shù)表達(dá)式

       將算數(shù)表達(dá)式先行進(jìn)行算數(shù)運(yùn)算,并將運(yùn)算得到的結(jié)果保存到變量VAR中。

     2.VAR=$[算術(shù)表達(dá)式]

       算術(shù)表達(dá)式中如果有變量引用,可以使用$引用,也可以省略$

       SUM=$[C+B] 相當(dāng)于 SUM [$C+$B]

     3.VAR=$((算術(shù)表達(dá)式))

       算術(shù)表達(dá)式中如果有變量引用,可以使用$引用,也可以省略$

     4.expr ARGU1 ARGU2 ARGU3

       ARGU1和ARGU3必須是數(shù)值

       ARGU2必須是運(yùn)算符號(hào)

     5.echo “算數(shù)表達(dá)式” | bc


     注意:* 在某些情況下需要轉(zhuǎn)義。

   變量:

     弱變量,弱類型的變量,字符型(默認(rèn))數(shù)值型(不包括浮點(diǎn)型)


 條件測(cè)試命令:

   test EXPRESSION

     shell的內(nèi)建命令


   [EXPRESSION]

     外部命令


   `EXPRESSION`

     bash的內(nèi)部關(guān)鍵字


     注意:這類命令一般沒有執(zhí)行結(jié)果,只有執(zhí)行狀態(tài)返回值


     test測(cè)試命令有三類測(cè)試表達(dá)式:

       1.數(shù)值測(cè)試:雙目操作符

         -eq:被測(cè)試的兩個(gè)數(shù)值是否相等,相等為真,不等為假

         -ne:被測(cè)試的兩個(gè)數(shù)值是否不等,不等為真,相等為假

         -gt:被測(cè)試的兩個(gè)數(shù)值左面的是否大于右面的,大于為真,小于為假

         -lt:被測(cè)試的兩個(gè)數(shù)值左邊的是否小于右邊的,小于為真,大于為假

         -ge:被測(cè)試的兩個(gè)數(shù)值左邊的是否大于等于右邊的,大于等于為真,小于為假

         -le:被測(cè)試的兩個(gè)數(shù)值左邊的是否小于等于右邊的,小于等于為真,大于為假

             例:

                test 整數(shù)1 –eq 整數(shù)2          整數(shù)相等

                test 整數(shù)1 –ge 整數(shù)2          整數(shù)1大于等于整數(shù)2

                test 整數(shù)1 –gt 整數(shù)2          整數(shù)1大于整數(shù)2

                test 整數(shù)1 –le 整數(shù)2          整數(shù)1小于等于整數(shù)2

                test 整數(shù)1 –lt 整數(shù)2          整數(shù)1小于整數(shù)2

                test 整數(shù)1 –ne 整數(shù)2          整數(shù)1不等于整數(shù)2


       2.字符串測(cè)試

         雙目操作符:

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

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

           > :被測(cè)試的兩個(gè)字符串在ASCII碼表中對(duì)應(yīng)的二進(jìn)制數(shù)值,左邊是否大于右邊,大于為真,小于為假。

           < :被測(cè)試的兩個(gè)字符串在ASCII碼表中對(duì)應(yīng)的二進(jìn)制數(shù)值,左邊是否小于右邊,小于為真,大于為假。

               注意:大于號(hào)和小于號(hào)必須用在`EXPRESSION`

           =~ :被測(cè)試的兩個(gè)字符串,左側(cè)的字符串能否被右側(cè)的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的長(zhǎng)度是否為0 

                 -n str1 檢查str1的長(zhǎng)度是否非0 

              注意:

              1.通常情況下字符串要加引號(hào),單引號(hào)或雙引號(hào)都行,根據(jù)實(shí)際情況選擇即可。

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

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


       3.文件狀態(tài)測(cè)試

         單目測(cè)試:

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

           -a|-e

            [-e /backup]

         

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

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

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

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

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

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

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

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

         

         文件的訪問權(quán)限測(cè)試:

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

           -w FILE:被測(cè)試的文件是否存在并且當(dāng)前有效用戶是否可寫……

           -x FILE:被測(cè)試的文件是否存在并且當(dāng)前有效用戶是否可執(zhí)行……

             例:

             對(duì)于目錄/tmp/testdir1,如果當(dāng)前有效用戶有讀、寫和執(zhí)行的權(quán)限,那么就在該目錄中創(chuàng)建一個(gè)文件;否則,顯示“沒有權(quán)限不能創(chuàng)建文件”的信息。

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

         

         文件的特殊權(quán)限標(biāo)識(shí)測(cè)試:

           -u FILE:被測(cè)試的文件是否存在并且是否設(shè)置了SUID權(quán)限,文件存在并且設(shè)置了SUID權(quán)限為真,否則為假。

           -g FILE:被測(cè)試的文件是否存在并且是否設(shè)置了GUID權(quán)限,……

           -k FILE:被測(cè)試的文件是否存在并且是否設(shè)置了STICKY權(quán)限,……


         文件的所有權(quán)測(cè)試:

           -o FILE:被測(cè)試的文件是否存在并且其屬主是否為當(dāng)前有效用戶

           -G FILE:被測(cè)試的文件是否存在并且其屬組是否為當(dāng)前有效用戶的組


         文件內(nèi)容是否為空:

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


         時(shí)間戳測(cè)試:

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


          雙目測(cè)試:

          FILE1 -ef FILE2:被測(cè)試的兩個(gè)文件是否指向同一個(gè)文件系統(tǒng)的相同inode的用硬連接

          FILE1 -nt FILE2:被測(cè)試的兩個(gè)文件,F(xiàn)ILE1是否比FILE2更新

          FILE1 -ot FILE2:被測(cè)試的兩個(gè)文件,F(xiàn)ILE1是否比FILE2更舊


      注意:在使用"["簡(jiǎn)寫test時(shí),左中括號(hào)后面的空格和右括號(hào)前面的空格是必需的,如果沒有

          空格,Shell不可能辨別表達(dá)式何時(shí)開始何時(shí)結(jié)束.

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

          例如:

              test –w File

          改寫成    

              [ –w File ]    


        測(cè)試語(yǔ)句中可以添加邏輯運(yùn)算:

          第一種表達(dá)方式:

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

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

           ![ -o/tmp/test ]

          第二種表達(dá)方式:

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

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

           [ !-o/tmp/test ]

命令的執(zhí)行結(jié)果:

正常的輸出結(jié)果

命令的執(zhí)行狀態(tài)返回值:

0-255

0:表示命令執(zhí)行成功

1,2,127:系統(tǒng)保留的;

3-126,128-255:用戶自定義的執(zhí)行狀態(tài)返回值;

           exit[#]

           退出當(dāng)前shell的登錄

           當(dāng)shell腳本運(yùn)行時(shí),一旦遇到exit命令,將立即結(jié)束當(dāng)前shell進(jìn)程,同時(shí)腳本運(yùn)行也將被停止,即exit后面的所有命令不再執(zhí)行


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI