shell學習總結-3

秦無殤發表於2019-04-04

1、shell函式

1.1、shell函式定義

對於重複出現的程式碼,在shell中可以定義函式,然後在指定的地方呼叫即可。便於程式碼複用,提高開發效率。

定義函式的語法如下:

1 function 函式名(){
2  語句塊
3  返回值
4 }

示例:

1 function hello(){
2 echo "Hello"
3 }

2、呼叫函式

通過函式名稱來呼叫已定義的函式

1 function_name

兩個數相加的函式與定義:

 1 #定義函式add
 2 function add(){
 3     a=1
 4     b=3
 5     val=`expr ${a} + ${b}`
 6     echo "${a} + ${b} is :${val}"
 7          
 8 }
 9 #呼叫函式
10 add

輸出:

1 1 + 3 is :4

1.3、帶引數的函式

上面的add函式a,b的值已寫死,可用性太差。下面傳入引數來重寫add函式

 1 #定義函式add
 2 function add(){
 3     #$1表示第一個引數
 4     #$2表示第二個引數
 5     #$n表示第n個引數
 6     a=$1
 7     b=$2
 8     val=`expr ${a} + ${b}`
 9     echo "${a} + ${b} is :${val}"
10          
11 }
12 #呼叫函式
13 add 1 3
14 add 2 25

輸出:

1 1 + 3 is :4
2 2 + 25 is :27

 1.4、函式返回值

1 #函式返回值不是必須的,與一般語言的返回值含義不同
2 #語法 return status_code,表示函式的退出狀態
#退出狀態是個數字,一般成功為0,失敗為1
#$? 用來獲取上一個命令的退出狀態或返回值。
1 #呼叫函式
2 add 1 2
3 echo "add func exit code is : $?"

輸出:

1 add func exit code is : 0

假如把add函式執行成功的退出狀態定義為200,重寫add函式並判斷是否執行成功

示例:

 1 #定義函式add
 2 function add(){
 3         #定義成功狀態碼
 4     ok_code=200
 5     err_code=100    
 6     a=$1
 7     b=$2
 8     val=`expr ${a} + ${b}`
 9         if [ $? -eq 0 ]
10     then
11             return ${ok_code}
12     else
13             return ${err_code}
14     fi
15          
16 }
17 #呼叫函式
18 add 1 e
19 if [ $? -eq 200 ]
20 then
21     echo "add func run sucess."
22 else
23     echo "add func run fail."
24 fi

輸出:

1 expr: 非整數引數
2 add func run fail.

1.5、如果獲取函式的處理結果

a、使用全域性變數

 1 #定義函式add
 2 function add(){
 3         #定義成功狀態碼
 4     ok_code=200
 5     err_code=100    
 6     a=$1
 7     b=$2
 8     val=`expr ${a} + ${b}`
 9         if [ $? -eq 0 ]
10     then
11             return ${ok_code}
12     else
13             return ${err_code}
14     fi
15          
16 }
17 #呼叫函式
18 add 1 2
19 echo "add 1 2 result is : ${val}"

輸出:

1 add 1 2 result is : 3

b、在函式內部echo 出變數,在函式外部用$(func_name arg1  argn)捕捉

1 #定義函式add
2 function add(){    
3     a=$1
4     b=$2
5     val=`expr ${a} + ${b}`
6         echo ${val}
7 }
8 #使用$(add 1 2)捕捉結果
9 echo "add 1 2 result is : $(add 1 2)"

輸出:

1 add 1 2 result is : 3

推薦使用第二種

1.6、break和continue

break用於退出迴圈,退出後迴圈不再執行。

cotinue用於退出本次迴圈,繼續執行下一次迴圈。

break示例:

 1 #尋找1~10之間第一個偶數
 2 #找到後即跳出迴圈,不再繼續
 3 for i in `seq 1 10`
 4 do
 5     tmp=`expr ${i} % 2`
 6     if [ ${tmp} -eq 0 ];then
 7     echo $i
 8         #continue
 9     break
10         fi
11 done

break輸出:

1 2 

continue示例:

 1 #尋找1~10之間所有的偶數
 2 for i in `seq 1 10`
 3 do
 4     tmp=`expr ${i} % 2`
 5     if [ ${tmp} -eq 0 ];then
 6     echo $i
 7         continue
 8         #下面這句echo永遠不會被執行
 9     echo "statement after cotinue"
10         fi
11 done

cotinue輸出:

1 2
2 4
3 6
4 8
5 10