Linux Shell編程之二選擇結構

來源:互聯網
上載者:User

標籤:shell編程;選擇

Shell編程學習之二

一、bash的條件測試

    測試方法或者說測試書寫:

test EXPR

[ EXPR ]

[[ EXPR ]]

    例如:測試變數 User_Name 的之是否為root

    test $User_Name="root"

    [ $User_Name == "root" ]

    [[ $User_Name == "root" ]


    根據比較時運算元的類型,測試類型分為:

測試類型 運算子 運算子所代表的意義 樣本
整形測試

-gt -lt -ge -le 

-eq -ne

-gt 大於  -lt 小於

-ge 大於或等於  -le 小於或等於

-eq 等於  -ne 不等於

都是雙目運算子:

[ $num -gt 3 ]

test $num -ne $sum

[[ $num -ne 0 ]]

字元測試 == =~ > < !=

== 等於   >大於    < 小於

!= 不等於   =~ 模式比對 

都是雙目運算子:

[ $num == "root"]

test $num > $sum

[[ "$num" =~ /bin/bash$ ]]

這裡注意 =~只能用 [[ ]]去匹配,而且=~後面的PATTERN(模式)不能使用"",‘‘等引用字元

-n -z

-z 測試檔案內容是否為空白,為空白時真,不為空白為假

-n 測試檔案內容是否為不空,不空為真,空為假

單目運算子

[ -n "$file_name" ]

檔案測試

-a|e -f -L|h -d

-b -c -S -p -s

-r -w -x -N

-a|e 測試檔案存在

-f 測試檔案為一般檔案

-L|h 測試檔案為軟串連檔案

-d 測試檔案是否為目錄

-b -c -p -S 測試檔案為塊裝置、字元裝置、管道檔案、socket檔案

-r -w -x 測試檔案可讀、可寫、可執行

-s 測試檔案為空白檔案

-N 測試檔案Mtime新於Atime

都是單目運算子

[ -f "$file_name" ]

[[ -b "$file_name" ]]

test -x $file_name

-nt -ot

file1 -nt file2 file1的Mtime新於file2的Mtime 

file1 -ot file2 file1的Mtime舊於file2的Mtime 

雙目運算子

[ file1 -nt "$file_name" ]

[[ $file1 -ot "$file_name" ]]


二、邏輯運算

    布爾運算:布爾運算的結果只有2中:真和假。

    常見的邏輯運算有:與 或 非 異或。與或非常用 && || ! 來表示。

    與的邏輯關係:

假 && 任意
真 && 真

     或的邏輯關係:

真 || 任意
假 || 假

    非的邏輯關係:


!假
!真

    異或的邏輯關係:相同為假,不同為真


三、選擇

    bash中的選擇語句通常有if,case。當然if,case在大多數情況下是可以相互轉換的。

1)if選擇語句

1、單分支if語句:

    if CONDITION;then

選擇分支

    fi

2、雙分支的if語句:

    if CONDITION;then

選擇分支1

    else

選擇分支2

    fi

3、多分支的if語句:

    if CONDITION1;then

選擇分支1

    elif CONDITION2;then

選擇分支2

    elif CONDITION3;then

選擇分支3

    ...

    else

選擇分支n

    fi

4、練習

寫一個指令碼,完成如下任務,其使用形式如下所示:

    script.sh {start|stop|restart|status}

其中:

    如果參數為空白,則顯示協助資訊,並退出指令碼;

    如果參數為start,則建立空檔案/var/lock/subsys/script,並顯示“starting script successfully.”

    如果參數為stop,則刪除檔案/var/lock/subsys/script,並顯示“Stop script successfully.”

    如果參數為restart,則刪除檔案/var/locksubsys/script並重新建立,而後顯示“Restarting script successfully.”

    如果參數為status,那麼:

    如果檔案/var/lock/subsys/script存在,則顯示“Script is running...”,否則,則顯示“Script is stopped.”

    說明:script.sh是指令檔名,在建立時,其名稱可以自己隨意定義,但如果其名稱發生變數,上/var/lock/sussys/下的檔案名稱也要隨之而變;

[[email protected] scripts]# cat myhttpd#!/bin/bash## Description: # Version: 0.0.1# Author: Alex# Date: 2014-07-09#判斷參數個數,如果參數小於1,則提示用法並退出if [ $# -lt 1 ];then        echo "Usage: `basename $0` {start|stop|restart|status}"        exit 2fi#判斷/var/lock/subsys是否存在,不存在則建立此目錄if [ ! -d /var/lock/subsys ];then/bin/mkdir -p /var/lock/subsysfiif [ "$1" == "start" ];then#如果/var/lock/subsys/`basename $0`檔案不存在,則建立,並顯示啟動成功;若存在則提示已啟動[ !  -e "/var/lock/subsys/`basename $0`" ] && /bin/touch  "/var/lock/subsys/`basename $0`" && echo "Starting `basename $0` successfully." ||  echo "`basename $0` is already start."elif [ "$1" == "stop" ];then#如果/var/lock/subsys/`basename $0`檔案存在,則刪除,並顯示關閉成功;若不存在則顯示關閉失敗[ -e "/var/lock/subsys/`basename $0`" ] && /bin/rm -f  "/var/lock/subsys/`basename $0`" && echo  "Stop myhttpd successfully." || echo -e "Stopping myhttpd \033[31mFAILED\033[0m."elif [ "$1" == "status" ];then#如果/var/lock/subsys/`basename $0`檔案存在,顯示running;若不存在則提示stopd[ -e "/var/lock/subsys/`basename $0`" ] && echo "`basename $0` is running..." || echo "`basename $0` is stopped."elseecho "Usage: `basename $0` {start|stop|restart|status}"fi

四、其他

1、組合條件測試:在多個條件間實現邏輯運算

    與:[ condition1 -a condition2 ]

    condition1 && condition2

    或:[ condition1 -o condition2 ]

    condition1 || condition2

    非:[ -not condition ]

    ! condition

2、bash編程之互動編程

    read 與使用者互動進行 

        -p "prompt" 提示句

        -t timeout 設定逾時時間

3、exit

    程式退出語句,一般是 exit n 這樣使用,n是錯誤狀態值。

4、shift

    通常是shift n 這樣使用,n是要踢掉的參數個數

[[email protected] scripts]# cat ./aboutshift #!/bin/bashecho $1shift 2 #踢掉2個參數echo $1shift 3 #踢掉3個參數echo $1[[email protected] scripts]# ./aboutshift 1 2 3 4 5 6 7 8 9 10136

未完待續....

本文出自 “黑夜過後” 部落格,請務必保留此出處http://guoting.blog.51cto.com/8886857/1436505

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.