函數是一個腳本代碼塊,你可以對它進行自定義命名,並且可以在腳本中任意位置使用這個函數。如果想要這個函數,只要調用這個函數的名稱就可以了。使用函數的好處在於模塊化以及代碼可讀性強。
(1).函數的創建語法
函數的創建方法一:
function 函數名稱 {
命令
}
函數的創建方法二:
函數名稱() {
命令
}
注意:函數名稱在當前腳本必須唯一。
調用函數的方法:
函數名稱 參數1 參數2 ......
調用函數時可以傳遞參數,函數中使用$1、$2......來引用傳遞的參數。
(2).函數的使用實例
實例1:
[root@youxi1 ~]# vim a.sh
#!/bin/bash
function fun1 {
echo "hello world"
}
fun2() {
echo $[$1+$2]
}
fun1
fun2 1 2
[root@youxi1 ~]# sh a.sh
hello world
3
實例2:如果存在相同名稱的函數,以最后一個為准
[root@youxi1 ~]# vim b.sh
#!/bin/bash
function fun1 {
echo "hello world"
}
fun1() {
echo "This is rewrite"
}
fun1
[root@youxi1 ~]# sh b.sh
This is rewrite
(3).return返回值
使用return命令來退出函數並返回特定的退出碼($?)
[root@youxi1 ~]# vim c.sh
#!/bin/bash
fun1() {
echo "return 3"
return 3
echo "why?"
}
fun1
[root@youxi1 ~]# sh c.sh
return 3
[root@youxi1 ~]# echo $?
3
注意:return一般是在函數的最后一行,因為一旦執行return命令,該函數后面的命令就不執行了。
return與exit的區別:return和exit都可以返回退出碼,但是不同的是,return是退出函數,而exit是退出整個腳本。
(4).函數值賦給變量
如下方實例中顯示,此時的函數就相當於一個命令,需要使用$()或``調用。
[root@youxi1 ~]# vim d.sh
#!/bin/bash
fun1() {
read -p "Input a number:" num
echo $[num*5]
}
num2=`fun1` #也可以是$(fun1)
echo $num2
[root@youxi1 ~]# sh d.sh
Input a number:2
10
(5).外部參數傳入函數
前面已經提到過,調用函數可以在后面跟隨參數,函數內部可以使用$n的形式調用。
[root@youxi1 ~]# vim e.sh
#!/bin/bash
fun1() {
echo $1
}
fun2() {
echo $1
}
fun3() {
echo $1
}
fun1 $1
fun2 /root/a.sh
fun3 5
[root@youxi1 ~]# sh e.sh hello
hello
/root/a.sh
5
(6).函數的參數
在一個腳本當中,函數外的參數,函數可以直接調用,並且函數內的參數,只要運行過函數,外部也可以直接調用。
[root@youxi1 ~]# vim f.sh
#!/bin/bash
num=5
fun1() {
num2=$[num*10]
}
fun1
echo $num2
[root@youxi1 ~]# sh f.sh
50
注意:腳本內的參數僅限腳本內使用
