Linux命令列與Shell指令碼程式設計大全(四)
阿新 • • 發佈:2018-12-16
一、建立函式
1.基本的指令碼函式
1.1 建立函式
function name { commands}
1.2 使用函式
在行中指定函式名就行了
## 建立函式,注意函式名和大括號中間有空格,不然會報錯
function func1 {
echo "this is an example of funciton"
}
## 使用函式
func1
2 返回值
2.1 預設返回值
## 函式預設退出狀態碼,返回函式執行的最後一條命令 func2() { echo "trying to display a non-existent file" ls -l badfile } func2 echo "the exit status is: $?" ##$?為函式預設推出狀態碼
2.2 使用return 命令
## 使用return命令,需要函式一結束就取返回值,並且返回值必須是0-255
function db1 {
read -p "Enter a value:" value
echo "doubling the value"
return $[ $value * 2 ]
}
db1
echo "the new value is : $?"
2.3 使用函式輸出
## 使用函式輸出 function db2 { read -p "Enter a value: " value1 echo $[ $value1 * 2 ] } result=$(db2) echo "the new result is $result"
3 在函式中使用變數
3.1 向函式傳遞引數
## 在函式中使用變數 # 向函式傳遞引數 function addem { if [ $# -eq 0 ] || [ $# -gt 2 ] then echo -1 elif [ $# -eq 1 ] then echo $[ $1 + $1 ] else echo $[ $1 + $2 ] fi } echo -n "Adding 10 and 15 :" value=$(addem 10 15) #在指令碼內呼叫函式的方式 echo $value # 將指令碼引數傳遞給函式 ./test17_3.sh 12 14 function multiply { echo $[ $1 * $2 ] } if [ $# -eq 2 ] then value=$(multiply $1 $2) ##手動將指令碼變數傳遞給函式 echo "$1 multiply $2 is $value" fi
3.2 在函式中處理變數
1 全域性變數
預設情況下,在指令碼中定義的任何變數都是全域性變數,即使在函式中定義的變數也是全域性變數
2 區域性變數
在變數宣告前加上local關鍵字即可
local temp=5
4 陣列變數和函式
4.1 向函式傳遞陣列引數
## 函式變數和陣列
function testit {
echo "the parameter are : [email protected]"
thisarray=($(echo "[email protected]"))
echo "The received array is ${thisarray[*]}"
}
myarray=(1 2 3 4 5)
echo "the original array is : ${myarray[*]}"
testit ${myarray[*]}
4.2 從函式返回陣列
用echo語句按照正確順序輸出單個數組值。
## 從函式返回陣列
function arraydblr {
local origarray
local newarray
local elements
local i
origarray=($(echo "[email protected]"))
newarray=($(echo "[email protected]"))
elements=$[ $# - 1 ]
for(( i = 0 ; i <= elements ; i++)){
newarray[$i]=$[ ${origarray[$i]} * 2 ]
}
echo ${newarray[*]}
}
myarray=(1 2 3 4 5)
arg1=$(echo ${myarray[*]})
result=($(arraydblr $arg1))
echo "the new array is : ${result[*]}"
5 函式遞迴
## 函式遞迴
function factorial {
if [ $1 -eq 1 ]
then
echo 1
else
local temp=$[ $1 -1 ]
local result=$(factorial $temp)
echo $[ $result * $1 ]
fi
}
read -p "Enter value :" value1
result=$(factorial $value1)
echo "The factorial of $value1 is : $result"
6 建立庫
使用函式庫的關鍵在於source命令,它有一個快捷的別名,稱為點操作符,如果使用庫檔案。
## 庫檔案 myfunc
[email protected]:~/Desktop/Scripts# cat myfuncs
function addem {
echo $[ $1 + $2 ]
}
function mulem {
echo $[ $1 * $2 ]
}
function divem {
if [ $2 -ne 0 ]
then
echo $[ $1 / $2 ]
else
echo -1
fi
}
source ./myfuncs ##引入庫檔案,也可以是 . /root/Desktop/Scripts/myfuncs
value1=10
value2=5
result1=$(addem $value1 $value2)
result2=$(mulem $value1 $value2)
result3=$(divem $value1 $value2)
echo "$value1 + $value2 = $result1"
echo "$value1 * $value2 = $result2"
echo "$value1 / $value2 = $result3"
7 在命令列上使用函式
7.1 在命令列上建立函式:
1.單行方式:需要在每個命令後面加上分號。 2.多行方式,不需要分號,只需要按下回車就行。
7.2 在.bashrc檔案中定義函式
1.直接定義,寫在$home/.bashrc檔案中。 2.讀取函式檔案,使用source命令將庫檔案中的函式新增到.bashrc指令碼中。