Shell指令碼通過引數傳遞呼叫指定函式

2021-06-26 18:30:53 字數 1621 閱讀 1654

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

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

#!/bin/bash

usage="usage: `basename $0` (add|sub|mul|div|all) parameter1 parameter2"

command=$1

first=$2

second=$3

function add()

function sub()

function mul()

function div()

case $command in

(add)

add;;

(sub)

sub;;

(mul)

mul;;

(div)

div;;

(all)

addsub

muldiv

;;(*)

echo "error command"

echo "$usage"

;;esac

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

[hdfs@cdhonf]$ ./calculator add 2 3

5[hdfs@cdhonf]$ ./calculator sub 2 3

-1[hdfs@cdhonf]$ ./calculator mul 2 3

6[hdfs@cdhonf]$ ./calculator div 2 3

0[hdfs@cdhonf]$ ./calculator all 2 35-1

60[hdfs@cdhonf]$ ./calculator a 2 3

error command

usage: calculator (add|sub|mul|div|all) parameter1 parameter2

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

function double() 

case $command in

(dou)

double "$first" #you can also use "$2"

;;

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

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

shell呼叫php指令碼,並傳遞引數

發表於 2011 07 15 分類目錄 php 一,為什麼我們要在命令列下執行php指令碼呢?個人理解,主要有二個原因 1,利用crontab去跑php,可以給伺服器減壓,當然在這裡有乙個條件,就是實時性要求不高。比如 sns中的好友動態,這個實時要求不高,但是資料量比較大,這個時候定時跑的話,會給...

shell指令碼 函式傳遞引數

在乙個指令碼中,多個函式之間可能需要相互傳遞引數,之前一直對引數的傳遞以及引用有些疑問,今天做了幾個小測試例子 1 bin bash function f1 function f2 f1 1執行結果 temp2.sh pp mj ubuntu temp2.sh pp f1pp f2pp2 bin b...

Shell指令碼的引數傳遞

在許多的情況下,shell指令碼都需要接受使用者的輸入,根據使用者的輸入引數來執行不同的操作。本節內容主要介紹shell指令碼的引數,以及如何在指令碼中接收引數。從命令列傳遞給shell指令碼的引數又稱為位置引數,這主要是因為shell指令碼會根據引數的位置來接受它們的資料。在shell指令碼的內部...