shell腳本編程之運算

一、數學運算

  1、expr命令

    此命令可以在命令行執行數學運算操作。

8.jpg

    由于此命令使用時過于麻煩,所以不推薦使用。

  2、方括號和雙圓括號

     $[ EXPRESSION ]

     $(( EXPRESSION ))

     在之前的實例中已經出現過方括號的表達式:$[$a+$b]。

  3、let命令

12.jpg

  4、算術運算符

    x+=y:相當于x=x+y

    x-=y:相當于x=x-y

    x*=y:相當于x=x*y

    x/=y:相當于x=x/y

    x++: 相當于x=x+1

    x–: 相當于x=x-1

二、字符串連接

  變量引用后方直接跟字串時,變量名要加{}。

1.jpg

三、條件測試

  條件測試的表達式可以使用以下三種格式:

    [ expression ]:注意中括號與表達式之間有空格;

    [[ expression ]]:注意中括號與表達之間有空格;

    test expression:上面的兩種格式其實都是test命令的其它格式。

  test命令可以進行3種類型的條件判斷:整數測試、字符串測試、文件測試。 

  1、整數測試

    -eq:測試兩個整數是否相等;

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

    -gt:測試一個數是否大于一個數,大于為真,否則為假;

    -lt:測試一個數是否小于一個數,小于為真,否則為假;

    -ge:測試一個數是否大于一個數,大于等于為真,否則為假;

    -le:測試一個數是否大于一個數,小于等于為真,否則為假;

    實例:如果兩個參數相等則顯示"equal",否則顯示"different"。

1.jpg

  2、字符測試

    ==:測試是否相等,等為真,不等為假;

    !=:測試是否不等,不等為真,等為假;

    =~:模式配置;

    -z string:測試指定字符串是否為空,空為真不空為假

    -n string:測試指定字符串是否為空,空則假不空為真

    -s string:測試指定字符串是否不空,不空為真,空則為假

    實例:

2.jpg

3.jpg

   上面是一個使用"-z"的例子,如果改為-n的話則如下圖所示:

4.jpg

    注:變量比較時最好加上引號(單雙都可以),否則如果變量為空的話,會報錯。

  3、文件測試

    -a FILE:測試FILE存在為真,否則為假;

    -e FILE:測試FILE是否存在,存在為真,否則為假;

    -l/-L FILE:軟鏈接文件;

    -b:塊設備;

    -c:字符設備;

    -S:套接字文件;

    -p:命名管道;

    -s:非空文件為真;

    -f FILE:測試FILE是否為普通文件;

    -d FILE:測試指定路徑是否為目錄;

    -r FILE:測試文件對當前用戶是否可讀;

    -w FILE:測試文件對當前用戶是否可寫;

    -x FILE:測試文件對當前用戶是否可執行;

    -N FILE:修改文件時間比訪問時間新則為真;

   內容重定向到文件中,但文件還沒有被打開過的情況

    file1 -nt file2:file1比file2新則為真;

    file1 -ot file2:file1比file2舊則為真。

    實例:如果/test存在則將其重命名為/new-test,否則創建這個目錄:

5.jpg

   實例:給定一個參數,首先判斷此參數是否存在,如果存在判斷是否為文件,若為文件確保其有執行權限:

6.jpg

   驗證:

7.jpg

  4、組合測試條件

    在多個條件間實現邏輯運算

      -a:與關系 [ condition1 -a condition2 ]

      -o:或關系 [ condition1 -o condition2 ]

      !:非關系  [ ! condition ] 或 [ -not condition ]

8.jpg

9.jpg

四、命令間的邏輯關系

    &&:邏輯與,只有當左邊的條件為真時才會執行右邊的語句;

    ||:邏輯或,當左邊的條件為假時才會執行右邊的語句。

   上面的實例也可以使用邏輯與來完成:

10.jpg

10.jpg

原創文章,作者:petmaster,如若轉載,請注明出處:http://www.www58058.com/10690

(0)
petmasterpetmaster
上一篇 2015-12-28 15:47
下一篇 2016-01-01 15:00

相關推薦

  • Linux基礎-第三周

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 2、取出最后登錄到當前系統的用戶的相關信息。 3、取出當前系統上被用戶當作其默認shell的最多的那個shell。 4、將/etc/passwd中的第三個字段數值最大的后10個用戶的信息全部改為大寫后保存至/tmp/maxusers.txt文件中。 5、取出當前主機的…

    2018-03-19
  • 字符切割和用戶管理

    1、列出當前系統上所有已經登錄的用戶的用戶名,同一個用戶登錄多次,則只顯示一次 who |cut -d’ ‘ -f1 |sort -u2、取出最后登錄到當前系統的用戶的相關信息。 last |head -1|cut -d’ ‘ -f1 3、取出當前系統上被用戶當作其默認shell的最多的那個shell。 cut…

    2017-12-17
  • 搜索引擎-處理查詢

     我們從用戶的角度來看,用戶不關心什么索引結構是倒排還是簽名文件,也不需要知道相關排序算法。用戶提交了查詢,就需要獲取滿意的搜索結果。這個搜索結果就是搜索引擎是否提供有效的服務。 1.查詢流程 查詢流程圖: 1)用戶提交查詢 2)分析查詢      查詢預處理:    …

    Linux干貨 2015-12-10
  • 第七周 練習

    1. 請描述網橋、集線器、二層交換機、三層交換機、路由器的功能、使用場景與區別。 集線器:集線器的主要功能是對接收到的信號進行再生整形放大,以擴大網絡的傳輸距離網橋:是早期的兩端口二層網絡設備,用來連接不同網段。網橋的兩個端口分別有一條獨立的交換信道,      不是共享一條背板總線,可隔…

    Linux干貨 2016-12-13
  • Linux文件管理命令

    2018-03-11

    2018-03-11
  • 馬哥教育21期網絡班—第一周課程+練習

    計算機的組成及功能 根據馮·諾依曼原理 現在計算機有五部分組成 分別是:運算器、控制器、存儲器、輸入設備和輸出設備 現在把運算器和控制器做到一塊就是所謂的CPU CPU = 運算器+控制器 存儲器:memory 用于存儲信息的記憶設備,存儲器分為ROM和RAM 編址存儲設備 ROM:只讀存儲器,尋址地址空間的組成部分 RAM:隨機存儲器 輸入和輸出設備: 輸…

    Linux干貨 2016-06-26
欧美性久久久久