一、函數的一般形式
#!/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-hant/n/137127.html
微信掃一掃
支付寶掃一掃