溫馨提示×

溫馨提示×

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

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

#7 shell腳本編程之bash運算和條件測試命令

發(fā)布時間:2020-09-25 04:41:25 來源:網絡 閱讀:380 作者:誰等了誰 欄目:開發(fā)技術

   編程語言:


     問題空間:就是使用人類的自然語言描述的任務;


     解空間:就是使用編程語言描述任務的實施步驟和顯示最終結果;


   編程思想:能夠把編程語言所提供的語法格式,隨時隨地地轉換成能夠解決問題的思路;


   對于編程語言的學習:

     1.學習編程語言的語法格式;

     2.學習工具的使用(庫、命令)

     3.算法

     4.數據結構

 

   學習編程語言的目標:

     將問題空間和解空間對應起來:最直接的編發(fā)就是使用解空間的語言習慣來進行思考;


   shell腳本編程:            

     shell腳本的內容和格式,

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

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

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

       有一定的縮進


   利用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  --> let B++

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


       B++:先將B的值賦給其他變量,然后再自身+1;

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

    

     算術常用命令 :

       1.let VAR=算術表達式

         將算術表達方式先進行算術運算,并將運算得到的結果保存到變量var中;

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

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

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

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

       4.expr argu1 argu2 argu3

         argu1和argu3必須是數值;

         argu2必須是運算符號

       5.echo "算術表達式"|bc


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


       例子;

         統計/etc/fastab、/etc/passwd、/etc/issue、三個文件中,以字母r開頭的行數的總和;


  變量:存儲數據空間的容器

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


  條件測試命令:

    test expression

      shell內建命令:


    [expression]

      外部命令:


    `expression`

      bash的內部關鍵字:


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


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

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

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

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

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

         -lt:被測試的兩個數值,左邊的是否小于右面的,小于為真,不小于為假;

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

         -le:被測試的兩個數值,左邊的是否小于等于后邊的,小于等于為真,大于為假;


      2.字符串測試

        雙目操作符:

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

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

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

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

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

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


        單目操作符:

          -z 'string':判斷指定的字符串是否為空串,空位真,不空為假;

          -n 'string':判斷指定的字符串是否為非空串,非空位真,空為假;


        注意:

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

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

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


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

        單目操作符:

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

           -a | -e

             [ -e /backup ]


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

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

           -c file:被測試的文件是否存在并且是否為字符設備;存在且為字符設備為真,否則為假;

           -d file: 被測試的文件是否存在并且是否為目錄文件;存在且為目錄文件為真,否則為假;

           -f file:被測試的文件是否存在并且是否為普通文件; 存在且為普通文件為真,否則為假;

           -h | -L file:被測試的文件是否存在并且是否為符號鏈接文件;存在且為符號鏈接文件為真,否則為假;

           -p:被測試的文件是否存在并且是否為管道文件;存在且為管道文件為真,否則為假;

           -s:被測試的文件是否存在并且是否為套接字文件;存在且為套接字為真,否則為假;


        文件的訪問權限測試:

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

           -w file:被測試的文件是否存在并且當前有效用戶是否可寫;文件存在并且當前有效用戶可寫為真,否則為假;

           -x file:被測試的文件是否存在并且當前有效用戶是否可可執(zhí)行;文件存在并且當前有效用戶可執(zhí)行為真,否則為假;


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

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

           -g file:被測試的文件是否存在并且是否設置了SGID權限;文件存在并且設置了SGID權限為真,否則為假;

           -k file:被測試的文件是否存在并且是否設置了STICKY權限;文件存在并且設置了STICKY權限為真,否則為假;


        文件的所有權測試:

           -O file:被測試的文件是否存在并且其屬主是否為當前有效用戶;文件存在并且為當前有效用戶為真,否則為假;

           -G file:被測試的文件是否存在并且其屬主是否為當前有效用戶的組;文件存在并且為當前有效用戶組為真,否則為假;

        

        文件內容是否為空:

           -s file:被測試的文件是否存在且內容不為空,存在且內容不為空為真,否者為假;


        時間戳測試:


           -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 ] 


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

    正常的輸出結果


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

      0-255

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

      1,2,127:系統保留;

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


    exit [#]

      退出當前shell的登錄,


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


向AI問一下細節(jié)

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

AI