我們在寫一些功能性指令碼的時候,往往會把操作相似或者引數類似行為接近的函式放在同乙個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指令碼的內部...