1. 程式人生 > >八使用Shell函數

八使用Shell函數

ont 字母 再次 ash 函數定義 簡潔 子shell XP 生成

Shell腳本中,將一些需要重復使用的操作,定義為公共的語句塊,即可稱為函數

使用函數的好處?

使腳本代碼更簡潔,增強易讀性
提高Shell腳本的執行效率

函數定義方法

基本格式1

function 函數名 {
   函數的功能體  
}

格式2

函數名() {
   函數的功能體
}

註:定義函數名,不會被輸出

使用函數時的規則:

先定義後調用;可以只定義不調用
在同一個腳本裏,函數名相同時,後定義生效
函數名區分字母大小寫
在函數體內定義的變量是局部變量,只能在當前函數內使用
在函數體外定義的變量是全局變量,全局變量所有函數都可以使用
函數之間可以互相調用
定義一次,可多次重用
Bash調用函數時不會開啟新的子Shell,會在現有的shell環境中執行該函數

fun.sh腳本裏定義函數sum.two(功能是輸出數字10 20 相加的和,並輸出計算結果)

[root@localhost shell]# cat sum_two.sh
#!/bin/bash
sum_two(){
sum=`expr 10 + 20`
echo "10 +20 = $sum "
}
sum_two

在腳本中建一個對2個整數求和的加法器

[root@localhost shell]# cat funadder.sh 
#!/bin/bash
adder(){
  echo $(($1+$2))
}
adder 
12 34 adder 56 789

服務腳本中的函數

適用於復雜的啟動/終止控制操作
方便在需要時多次調用

遞歸調用示例

Shell版的fork炸彈

僅13個字符:.(){.|.& };.
遞歸死循環,可迅速耗盡系統資源

無限的生成新的進程,造成死機

代碼解析

.()               #定義一個名為.的函數
{                #函數塊的開始標記
.|.&           #在後臺遞歸調用函數.
;              #函數塊的結束標記
.             #再次調用函數

函數可以遞歸調用(函數自己調用自己)

八使用Shell函數