函數的定義及參數調用
shell
函數是完成特定功能的代碼片斷,在shell中定義函數可使用代碼模塊化,便於調用,函數必須先定義纔可使用。數組
1、定義函數的方式bash
方法一:ide
函數名() {模塊化
函數要實現的功能代碼函數
}spa
方法二:orm
function 函數名 {索引
函數要實現的功能代碼it
}
2、調用參數
函數名 變量
函數名 變量從新賦值
函數名 位置變量$1 $2 $3.....
如下是函數傳參的一些示例
函數位置變量的傳遞
#!/bin/bash ########函數的位置參數傳遞 if [ $# -ne 3 ];then #若是腳本後接的參數不等於3個,那麼則打印腳本用法並退出 echo "usage: : `basename $0` par1 par2 par3" exit fi fun() { echo "$[$1 * $2 * $3]" #這裏的$1 $2 $3是函數的位置參數 } result=`fun $1 $2 $3` #而這裏的$1 $2 $3是腳本的接受的位置參數,而fun函數將腳本接受的位置參數傳遞到了函數中 echo "$result"
函數調用數組變量中的數值
################# #該腳本先定義數組,其中有1-5個值,然後定義一個arry函數,做用是接收外部參數num的數值,而且每次取值與sum值相乘 num=(1 2 3 4 5) #定義數組num sum=1 #定義sum初始值爲1 #定義函數array arry() { for i in "$@" # "$@" 爲全部參數 $* 也表明全部參數,不須要加「」 do let sum*=$i #sum的值與$i讀取的值相乘,再賦值給本身 done } arry ${num[@]} # 執行函數array,讀取$num中的值. echo $sum
#!/bin/bash #以上腳本做用和該腳本相同,執行腳本時帶數字參數,for循環全部數字,逐個給sum2相乘 sum2=1 for j in $* do let sum2*=$j done echo $sum2
如下例子舉例如何從定義變量中拿參數並從新賦值給函數中變量
local 變量名 是爲了避免與其餘變量衝突,只在該函數中生效,不影響全局
#!/bin/bash ############## #接收變量從新賦值 #傳遞參數到函數中,而且從新計算賦值 ################ num=( 1 2 3 ) #賦值數組num #定義函數array array() { local newnum=($*) #定義函數局部變量newnum local i #定義函數局部變量i for ((i=0;i<$#;i++)) # $#爲接收的全部參數 $*同理 此行即爲 $i起始值爲0,給下面new做爲索引,索引值<$# do product[$i]=$[${newnum[$i]} * 5] #將每次遍歷newnum數組的值乘以5,從新賦值給new done } array ${num[@]} #調用函數array echo ${product[@]} #輸出$num數組的值
小擴展,函數返回值
#!/bin/bash ### ##funtion的函數返回值 return ############ fun() { read -p "enter number: " num let sum=2*$num #返回$?的值 return $[2*$num] } fun #shell的返回值不能超過255,不管你輸入什麼數字,以上運算返回的值都在255之內 echo "fun return value: $?"