shell腳本中的算術運算和條件測試語句

shell腳本編程實現算術運算有:shell

 +、-編程

 *、/bash

 模運算 %ide

 乘方 ** 或 ^測試


 特殊的加強型算術運算:進程

  ++ --字符串


算術運算方法it

  1.let命令 VAR=算術表達式io

    將算術表達式先行進行算術運算並將運算結果保存到變量VAR中class

  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.文件狀態測試

    單目:

    一、-a | -e :文件的存在性測試:若是被測試的文件存在爲真,不存在爲假

    二、文件類型測試(先測試了存在性)

     -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後面的全部命令都不會再被執行

相關文章
相關標籤/搜索