一、函數的一般形式
#!/bin/bash function_name () { commands }
Shell函數是一組可以重複使用的代碼,在執行過程中接收參數、操作變數等,返回值可選。一個簡單的函數可以包含一條命令或多條命令。函數名和參數列表必須與調用函數時使用的名稱和參數列表相同。
二、定義函數
定義函數需要使用`function`關鍵字,函數的名稱不能與shell保留字相同。在函數體中,需要將參數通過`$n`的形式接收並使用。
function func_name { echo $1 echo $2 } func_name hello world
執行結果:
hello world
三、調用函數
在腳本中可以隨時調用函數,只需提供函數名即可。如果需要向函數傳遞一些值,直接將它們作為參數傳遞,參數之間用空格分隔,在函數體中通過`$n`的形式訪問到傳遞的參數。
#!/bin/bash function myFunc { echo "Hello, $1" } myFunc 'world'
執行結果:
Hello, world
四、函數返回值
函數可以返回一個值給調用者,值用於函數後進行處理。
#!/bin/bash function myFunc { echo "Hello, $1" return 10 } myFunc 'world' echo "return value is $?"
執行結果:
Hello, world return value is 10
五、函數參數
參數傳遞可以包括固定數量的參數和可變數量的參數。傳遞的參數通過`$1`、 `$2` 等接收,`$?` 獲取函數返回狀態。
固定參數
function myFunc { echo "1st arg: $1, 2nd arg: $2" } myFunc 'hello' 'world'
執行輸出:
1st arg: hello, 2nd arg: world
可變數量參數
可變數量參數函數在傳遞參數時不需要提前告訴該函數有多少參數。通過 “$@” 來引用,”$*” 也可用但稍微有點區別。利用 shift 可以很方便的遍歷所有的參數,shift 命令會將所有參數左移,也就是原本的 $2 會變成 $1,$3 變成 $2,以此類推,而 $0 表示的是腳本本身的名字。
function myFunc { echo "Your name is: $1" shift echo "Age : $1" } myFunc 'John' '20'
執行結果:
Your name is: John Age : 20
六、函數使用場景
函數可以被用於編寫高級腳本,將程序組織為易維護、易修改,同時也改善腳本的可重用性。
批量處理文件夾
#!/bin/bash countFiles () { local DIR=$1 local NUM_FILES=$(ls -a $DIR | wc -l) echo "Number of files in $DIR: $NUM_FILES" } for D in *; do if [ -d "${D}" ]; then countFiles $D fi done
執行結果:
Number of files in folder1: 5 Number of files in folder2: 10
批量重命名文件
#!/bin/bash function renameFiles { counter=1 for file in *.$1; do if [ -e "$file" ]; then mv -n "$file" "$2$counter.$1" let counter++ fi done } renameFiles jpg prefix
執行結果:
*前執行結果
a.jpg b.jpg c.jpg
*後執行結果
prefix1.jpg prefix2.jpg prefix3.jpg
七、總結
Shell函數可以在Shell腳本中被定義和調用。定義後可以像其他命令一樣調用,並且可以根據需要向函數傳遞參數以使其調用的功能更加靈活。合理地使用Shell函數可以提高腳本的可維護性和可重用性
原創文章,作者:TBDV,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/137127.html