函數是一個腳本代碼塊,你能夠對它進行自定義命名,而且能夠在腳本中任意位置使用這個函數。若是想要這個函數,只要調用這個函數的名稱就能夠了。使用函數的好處在於模塊化以及代碼可讀性強。vim
(1).函數的建立語法bash
函數的建立方法一:模塊化
function 函數名稱 { 命令 }
函數的建立方法二:函數
函數名稱() { 命令 }
注意:函數名稱在當前腳本必須惟一。spa
調用函數的方法:blog
函數名稱 參數1 參數2 ......
調用函數時能夠傳遞參數,函數中使用$一、$2......來引用傳遞的參數。it
(2).函數的使用實例io
實例1:function
[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:若是存在相同名稱的函數,以最後一個爲準class
[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
注意:腳本內的參數僅限腳本內使用