Shell指令碼通過參數傳遞調用指定函數

來源:互聯網
上載者:User

標籤:shell   bash   linux   function   

我們在寫一些功能性指令碼的時候,往往會把操作相似或者參數類似行為接近的函數放在同一個shell指令碼中,這樣管理方便,維護簡單,也很清晰。對於這種情況,通常的辦法是,在shell指令碼中定義所有用到的函數,然後在本文代碼中用case語句讀入輸入的命令函數參數來調用指定的相應函數。這樣就達到一個shell指令碼使用的強大功能。

下面以一個簡單的例子來說明。一個計算機提供了加減乘除的功能:

#!/bin/bashusage="Usage: `basename $0` (add|sub|mul|div|all) parameter1 parameter2"command=$1first=$2second=$3function add() {        ans=$(($first + $second))        echo $ans}function sub() {        ans=$(($first - $second))        echo $ans}function mul() {        ans=$(($first * $second))        echo $ans}function div() {        ans=$(($first / $second))        echo $ans}case $command in  (add)     add     ;;  (sub)     sub     ;;  (mul)     mul     ;;  (div)     div     ;;  (all)     add     sub     mul     div     ;;  (*)     echo "Error command"     echo "$usage"     ;;esac

上面的這段shell指令碼,我們就可以通過傳入不同的參數調用達到不同的目的。

[[email protected]]$ ./calculator add 2 35[[email protected]]$ ./calculator sub 2 3-1[[email protected]]$ ./calculator mul 2 36[[email protected]]$ ./calculator div 2 30[[email protected]]$ ./calculator all 2 35-160[[email protected]]$ ./calculator a 2 3Error commandUsage: calculator (add|sub|mul|div|all) parameter1 parameter2

倘若我們不想每個函數都用同樣個數的參數,也就是不同的函數參數不一樣時候怎麼辦?這時候我們可以在函數體的內部讀入參數,然後在case後的相應調用語句時候也傳入相應的參數。

function double() {        ans=$(($1 + $1))        echo $ans}case $command in  (dou)     double "$first"   #you can also use "$2"     ;;

當我們需要將command之後的參數原封不動傳給調用函數,而卻又要忽略command參數,這時候我們可以在調用前使用一次shift命令。shift命令實現將參數左移一位,這樣原來的第一個參數就消失了。

如果要將剩下的參數原封不動地傳給函數,可以使用參數$*;如果將剩下的參數組成一個命令字串傳給函數,則使用參數"$*"。區別就是是否用引號,有引號時候實際只傳了一個參數過去,它是當前shell中shift之後載入的參數的組合,沒有引號就是剩下的參數了。

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.