Linux學習筆記:bash算術運算及shell腳本

利用bash腳本編程實現算數運算:(bc 計算器)node

  +、/shell

  *、/編程

  %   模運算,取餘數bash

  **|^ide

  

  加強型的算術運算符號:測試

  +=  :  let B=B+2 --> let B+=2進程

  -=  :  let B=B-2 --> let B-=2字符串

  *=  :  let B=B*2 --> let B*=2it

  /=  :  let B=B/2 --> let B/=2class

  %=  :  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的值賦給其餘變量,再給B自身加1

  ++B :先將B自身加一,再講加1後的值賦給其餘變量。


  算數運算方法:

    1.let VAR=算數表達式

      將算術表達式先行進行算術運算,並將運算獲得的結果保存到變量VAR中;

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

      算術表達式中若是有變量引用,可使用$引用,也能夠省略$;

        SUN=$[C+B] 至關於 SUN=$[$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:被測試的兩個數值,左邊的是否小於等於右邊的,小於等於爲真,大於爲假。



  2.字符串測試

    雙目操做符:

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

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

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

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

        注意:> < 必須在`EXPRESSION`測試語句中;

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


    單目操做符:

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

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


    注意:

      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:被測試文件是否存在而且當前有效用戶是否可執行。。。。。。。

    

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

      -u FILE :被測試的文件是否存在而且是否設置了SUID權限,文件存在而且設置了SUID權限爲真,不然假

      -g FILE :被測試的文件是否存在而且是否設置了SGID權限,文件存在而且設置了SGID權限爲真,不然假

      -k FILE :被測試的文件是否存在而且是否設置了STICKY權限,文件存在而且設置了STICKY權限爲真,不然假


    文件的全部權測試:

      -O FILE:被測試的文件是否存在而且其屬主是否爲當前有效用戶。

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


    文件內容是否爲空:

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


    時間戳測試:

      -N FILE:被測試的文件自從上一次被修改以後,是否被修改過;


    雙目測試:

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

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

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


測試語句中能夠添加邏輯運算:

  第一種表達方式:

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

相關文章
相關標籤/搜索