快速入門shell指令碼編寫(四)

來源:互聯網
上載者:User

標籤:指令碼   vim   unix   終端   shell   

Lee出品,轉載請註明出處 http://blog.csdn.net/hnulwt/article/details/43234977

繼續上次學的內容,這次學習 case 語句和 shell的函數概念。

case 語句

首先先看看測試程式:

  1 #! /bin/sh  2  3 animal=dog  4  5 case "$animal" in  6 cat)  7         echo "cat";;  8 dog)  9         echo "dog";; 10 lion) 11         echo "lion";; 12 esac

上面程式運行結果很簡單,輸出:dog

他的結構是:

case "變數名" in

字串一)

執行語句一;;

字串二)

執行語句二;;

esac

需要特別注意的幾點是:

1,case 後面的變數名要用引號括起來(上面例子程式中的第5行)

2,匹配條件,字串前面沒有括弧,後面有括弧 (上面程式中的6、8、10行)

3,執行語句結束位置要有雙分號; (上面程式中的7、9、11行)

4,結尾要有倒置的case匹配,即esac

函數

首先我們看一個最簡單的函數,下面是一段程式:

  1 #! /bin/sh  2  3 sayDog()  4 {  5         echo "dog"  6         return $?  7 }  8  9 sayDog
程式很簡單,3-7行我們定義了sayDog函數。第六行其實也可以忽略,$? 在之前章節講過是函數的返回值,在第9行我們調用了這個函數。

來看看程式的運行結果:

$ sh test.sh
dog

參數

如何給函數裡面傳入參數呢,shell不像我們寫的java 、c++程式在括弧裡面傳參數,傳參數只需要直接在函數裡面使用$n 既可(n代表傳入的第幾個參數)

看下面這一段程式:

  1 #! /bin/sh  2  3 sayAnimals()  4 {  5         echo $1  6         echo $2  7 }  8  9 sayAnimals cat dog
在上面函數的第5、6行,使用了傳入的參數1、參數2。第9行調用函數,並且傳入cat dog倆個參數,我們來看看執行結果:

$ sh test.sh
cat
dog

看到了吧?shell傳入參數其實非常簡單。
返回值
shell的返回值和我們理解的一般的程式返回值是不一樣的,shell 函數返回值只能是整形數值,一般是用來表示函數執行成功與否的,0表示成功,其他值則表示失敗。因而用函數返回值來返回函數執行結果是不合適的。如果return一個字串,則會得到錯誤提示:“numeric argument required”

程式是死的,人是活的嘛,這樣不行,我們可以通過定義全域變數,函數將計算結果賦給全域變數,然後指令碼中其他地方訪問這個全域變數,就可以達到我們的目的啦。

輸入、輸出重新導向

使用過ant 等工具的人可能對這個概念已經不陌生了。

每個 Unix/Linux 命令運行時都會開啟三個檔案:

標準輸入檔案(stdin):stdin的檔案描述符為0,Unix程式預設從stdin讀取資料。

標準輸出檔案(stdout):stdout 的檔案描述符為1,Unix程式預設向stdout輸出資料。

標準錯誤檔案(stderr):stderr的檔案描述符為2,Unix程式會向stderr流中寫入錯誤資訊。

shell的重新導向用於將標準輸出或標準錯誤輸出重新導向到其他位置。

標準輸入,標準輸出,標準錯誤輸出是什麼呢?我們可以理解為:鍵盤是標準輸入,顯示器是標準輸出,錯誤輸出預設仍然是顯示器。

而重新導向就是將本來要輸出在顯示器上的東西,定向到其他位置了,比如檔案中。

輸出重新導向的文法為:指令 > 檔案名稱

我們舉個例子,我們在終端執行命令 ls > test,這時候我們在螢幕上看不到輸出,本來ls就是現實目前的目錄下的檔案,這時候我們已經把這些輸出重新導向到一個叫test的檔案中了。我們通過vim test開啟,可以看到結果。確實結果輸出到test檔案中了。這裡不再圖示,自己執行命令即可。

輸出重新導向還有一個格式:指令 >> 檔案名稱

這個格式會保證 若已存在檔案,則結果追加到輸出到檔案末尾,即不會覆蓋。

輸入重新導向的文法:指令 < 檔案名稱

例子:比如我們有一個檔案test.txt,裡面有3行內容。我們要統計他的行數,可以通過執行命令:wc -l < test.txt來統計

結果輸出:3

好了,通過四節的內容,我們已經掌握shell的基本使用方式,可以寫出一些簡單的shell程式,但是距離真正編碼還是有一段差距的,所以我們還要繼續努力!多練習,多看別人寫的shell程式,達到學習,提升自己的目的。

快速入門shell指令碼編寫(四)

相關文章

聯繫我們

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