傳遞參數

可以將資料傳入函式內,函式可根據傳入的內容,做特定的處置。

參數的傳遞則使用 $1, $2 ....

例:

function Hello () {
    echo "$1"
}

Hello "Hello World"

呼叫此一函式時,將欲傳入的參數值,直接接在函式名稱之後,該參數之值便存在 $1 之中。
若有二個以上,則對照存在 $1, $2, $3, .....

實例:在 for 迴圈那一章,我們有示範大量建帳號程式,在此,我們示範一個大量刪除帳號的程式,用來展示函式的參數傳遞。

#! /bin/sh

# 定義函式 DelUser

function DelUser () {
	for th in $*
        # 等同於 for th in bob2 jack2 anne2 mis2 lala2 toy2 hany2
	do
            userdel -r "$th"
            echo "已刪除使用者 $th"
	done

}

# 取得使用者帳號
# cu5.txt 的內容為 bob2 jack2 anne2 mis2 lala2 toy2 hany2,每個帳號擺一列

r=`cat cu5.txt`

# 呼叫 DelUser 函式來刪除使用者

DelUser $r

# 上式如同: DelUser bob2 jack2 anne2 mis2 lala2 toy2 hany2 一樣


# 例:

#! /bin/sh


function FIF () {

  if [ $# -ne 1 ]; then
     echo "使用法: $0 介面"
     exit
  fi
 
  if dmesg | grep -q "$1"; then
	echo " $1 找到了"
  else
	echo " $1 找不到"
  fi
}

# 執行 function FIF , 並傳入參數 eth0 , 此時, FIF function 中的 $1 會變成 eth0
FIF eth0

# 執行 function FIF , 並傳入參數 eth1 , 此時, FIF function 中的 $1 會變成 eth1
FIF eth1


另外,若在函式內部有使用其它變數,您不想讓此變數和外界相同的變數相互影響,可使用 local 這個關鍵字來宣告它,如下所示:


function TTT () {
	local AAA
        local BBB
        .........
        .........
}

這樣的話,外界若有同名的變數 AAA / BBB,就不會影響到 TTT function 中的變數 AAA / BBB