詳細介紹Linux shell指令碼基礎學習(三)

來源:互聯網
上載者:User
Linux shell指令碼基礎學習第三講,前面我們介紹shell命令和流程式控制制時,由於篇幅沒能講流程式控制制,今天流程式控制制我們這裡也只是介紹前面三各部分 if case 和 select。後面還有三個部分內容只能在Linux shell指令碼基礎學習第四講中介紹了。
1.1.5 Shell命令和流程式控制制(2)
3) 流程式控制制
1.if
"if" 運算式 如果條件為真則執行then後面的部分:

if ....; then....elif ....; then....else....fi

大多數情況下,可以使用測試命令來對條件進行測試。比如可以比較字串、判斷檔案是否存在及是否可讀等等…
通常用" [ ] "來表示條件測試。注意這裡的空格很重要。要確保方括弧的空格。
[ -f "somefile" ] :判斷是否是一個檔案
[ -x "/bin/ls" ] :判斷/bin/ls是否存在並有可執行許可權
[ -n "$var" ] :判斷$var變數是否有值
[ "$a" = "$b" ] :判斷$a和$b是否相等
執行man test可以查看所有測試運算式可以比較和判斷的類型。
直接執行以下指令碼:

#!/bin/shif [ "$SHELL" = "/bin/bash" ]; thenecho "your login shell is the bash (bourne again shell)"elseecho "your login shell is not bash but $SHELL"fi

變數$SHELL包含了登入shell的名稱,我們和/bin/bash進行了比較。
快捷操作符
熟悉C語言的朋友可能會很喜歡下面的運算式:

[ -f "/etc/shadow" ] && echo "This computer uses shadow passwors"


這裡 && 就是一個快捷操作符,如果左邊的運算式為真則執行右邊的語句。
您也可以認為是邏輯運算中的與操作。上例中表示如果/etc/shadow檔案存在則列印” This computer uses shadow passwors”。同樣或操作(||)在shell編程中也是可用的。這裡有個例子:

#!/bin/shmailfolder=/var/spool/mail/james[ -r "$mailfolder" ]' '{ echo "Can not read $mailfolder" ; exit 1; }echo "$mailfolder has mail from:"grep "^From " $mailfolder

該指令碼首先判斷mailfolder是否可讀。如果可讀則列印該檔案中的"From" 一行。如果不可讀則或操作生效,列印錯誤資訊後指令碼退出。這裡有個問題,那就是我們必須有兩個命令:
-列印錯誤資訊
-退出程式
我們使用花括弧以匿名函數的形式將兩個命令放到一起作為一個命令使用。一般函數將在下文提及。
不用與和或操作符,我們也可以用if運算式作任何事情,但是使用與或操作符會更便利很多。
2.case
case :運算式可以用來匹配一個給定的字串,而不是數字。

case ... in...) do something here ;;esac

讓我們看一個例子。 file命令可以辨別出一個給定檔案的檔案類型,比如:
file lf.gz
這將返回:

lf.gz: gzip compressed data, deflated, original filename,last modified: Mon Aug 27 23:09:18 2001, os: Unix

我們利用這一點寫了一個叫做smartzip的指令碼,該指令碼可以自動解壓bzip2, gzip 和zip 類型的壓縮檔:

#!/bin/shftype=`file "$1"`case "$ftype" in"$1: Zip archive"*)unzip "$1" ;;"$1: gzip compressed"*)gunzip "$1" ;;"$1: bzip2 compressed"*)bunzip2 "$1" ;;*) echo "File $1 can not be uncompressed with smartzip";;esac

您可能注意到我們在這裡使用了一個特殊的變數$1。該變數包含了傳遞給該程式的第一個參數值。
也就是說,當我們運行:

smartzip articles.zip

$1 就是字串 articles.zip
3. selsect
select 運算式是一種bash的擴充應用,尤其擅長於互動式使用。使用者可以從一組不同的值中進行選擇。

select var in ... ; dobreakdone.... now $var can be used ....

下面是一個例子:

#!/bin/shecho "What is your favourite OS?"select var in "Linux" "Gnu Hurd" "Free BSD" "Other"; dobreakdoneecho "You have selected $var"

下面是該指令碼啟動並執行結果:

What is your favourite OS?1) Linux2) Gnu Hurd3) Free BSD4) Other#? 1You have selected Linux

以上就是詳細介紹Linux shell指令碼基礎學習(三)的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!

  • 聯繫我們

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