1. 程式人生 > >Linux命令列與Shell指令碼程式設計大全(四)

Linux命令列與Shell指令碼程式設計大全(四)

一、建立函式

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指令碼中。

二、初始sed和gawk

三、正則表示式

四、sed進階

五、gawk進階