shell指令碼中的算術運算和條件測試語句

來源:互聯網
上載者:User

標籤:shell指令碼   算術運算   

shell指令碼編程實現算術運算有:

 +、-

 *、/

 模運算 %

 乘方 ** 或 ^


 特殊的增強型算術運算:

  ++ --


算術運算方法

  1.let命令 VAR=算術運算式

    將算術運算式先行進行算術運算並將運算結果儲存到變數VAR中

  2.VAR=$[算術運算式]   []內如果引用變數,可以使用$ 也可以省略掉$

  3.VAR=$((算術運算式)) 即把[]換成(())

  4.expr ARG1 ARG2 ARG3 

    ARG1和ARG3必須是數值,ARG2必須是運算子

  5.echo "算術運算式" | bc


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


  例如:統計/etc/fstab /etc/passwd /etc/issue三個檔案中以字母r開頭的行數的總和

    echo $[$(grep -c ‘^r‘ /etc/passwd)+$(grep -c ‘^r‘ /etc/passwd)]


條件測試命令:

 1.test Expression

  shell的內建命令 


 2.[ Expression ]

   外部命令[ ;


 3.[[ Expression ]]

   bash的內部關鍵字;

注意 這類命令一般沒有執行結果,只有執行狀態傳回值;用於邏輯判斷;



test測試命令有三類測試運算式

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

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

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

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

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

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

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


例子:~/aaa 的大小是否小於1000位元組

   [ $(du a.c | awk ‘{print $1}‘)  -lt 1000 ] && echo true || echo false


  2.字串測試

    分為雙目和單目

    雙目操作符:

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

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

     >: 被測試的兩個字串在ASCII碼錶中對應的位元值,左是否大於右,大於為真,小於為假

     <: 被測試的兩個字串在ASCII碼錶中對應的位元值,左是否小於右,小於為真,大於為假

       注意:> 和 < 必須用在[[ EXPR ]]的測試語句中

     =~ :被測試的兩個字串,左能否被右的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許可權,檔案存在且設定了SUID為真,否則為假;

     -g FILE:被測試的檔案是否存在並且是否設定了SGID許可權,檔案存在且設定了SGID為真,否則為假;

     -k FILE:被測試的檔案是否存在並且是否設定了STICKY許可權,檔案存在且設定了STICKY為真,否則為假;

    5.檔案的所有權測試:

     -O FILE:被測試的檔案是否存在並且其屬主是否為當前有效使用者,檔案存在且屬主為目前使用者為真,否則為假;

     -G FIle:被測試的檔案是否存在並且其屬組是否為當前有效使用者的組,檔案存在且屬組為目前使用者的組為真,否則為假;

    6.檔案內容是否為空白

     -s FILE:被測試的檔案是否存在並且內容不空,檔案存在且內容不空為真,否則為假;

    7.時間戳記測試:

     -N FILE:被測試的檔案自從上一次被修改之後,是否被修改過,修改過為真,否則為假



    雙目:

    FILE1 -nt FILE2  True if file1 is newer than file2 (according to modification date).

    

    FILE1 -ot FILE2  True if file1 is older than file2.

    

    FILE1 -ef FILE2  True if file1 is a hard link to file2.


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

  第一種表達方式

   例如[ -O /tmp/test ] && [ -s /tmp/test ]  : 判斷/tmp/test 是否為當前有效使用者所有且不為空白

  第二種

   [ -O /tmp/test -a -s /tmp/test ] 在這裡 -a 表示 &&

   [ -O /tmp/test -o -s /tmp/test ] 在這裡 -o 表示 ||

   [ ! -O /tmp/test ] 與 ! [ -O /tmp/test ] 結果相同,但!含義不同;也可以寫作

命令的執行結果

  正常的輸出結果


  命令的執行狀態傳回值

   0-255

   0:成功

   1,2,127:系統保留的

   3-126 128-255 :使用者自訂的傳回值


   exit [*]

   退出當前shell的登入


   當shell指令碼運行時,一旦遇到exit命令,將立即結束當前shell進程,同時指令碼的運行也將被停止,即exit後面的所有命令都不會再被執行


shell指令碼中的算術運算和條件測試語句

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.