函數
函數是一個腳本代碼塊,由用戶對其自定義,可以在腳本的任意位置創建,按照格式將命令寫入到函數中,系統不會直接執行函數中的命令。
如果想要這個函數,只要調用這個函數的名稱(只需要輸入名稱)就可以了,而且可以在腳本的任意位置調用,使用函數的好處在於模塊化以及代碼可讀性強。
語法
function 函數名稱() #()可以省略
{
命令
}
或者
函數名稱() #()不能省略
{
命令
}
function可以省略,函數名稱必須要有,()裏面爲空,{}中間就是我們執行的命令。
但要注意,函數名稱在腳本中必須唯一,若實在是有兩個重名,則會以最後一個爲準,這就導致有一個函數沒有執行。所以說,這種函數名稱相同的錯誤,不要讓其發生。
[root@linus ~]# cat 1.sh
#!/bin/bash
ta1()
{
echo "hello"
}
function ta1
{
echo "world"
}
ta1
[root@linus ~]# sh 1.sh
world
幾種使用方式
直接寫好函數,然後輸入名稱直接調用,這種方式是最基本的函數使用方法,不再演示。
可以在一個函數中調用另一個已經存在的函數
[root@linus ~]# cat 3.sh
#!/bin/bash
ta3()
{
echo "這是第一個函數"
}
ta4()
{
ta3
echo "這是第二個函數"
}
ta4
[root@linus ~]# sh 3.sh
這是第一個函數
這是第二個函數
可以把一個已有的函數,像命令一樣賦值給變量
[root@linus ~]# cat 5.sh
#!/bin/bash
ta5()
{
echo "這是一個函數"
}
a=`ta5`
echo "$a"
[root@linus ~]# sh 5.sh
這是一個函數
函數無法從腳本中直接訪問腳本參數值。如果想在函數中使用這些值,那麼必須在調用該函數時手動傳遞這些數據。
[root@linus ~]# sh 111 222
sh: 111: 沒有那個文件或目錄
[root@linus ~]# cat 6.sh
#!/bin/bash
ta6()
{
echo $[$1*$2]
}
ta7=`ta6 $1 $2`
echo $ta7
[root@linus ~]# sh 6.sh 111 222
24642
函數可以調用已有的變量,函數執行後,函數中的變量也可在腳本中使用
[root@linus ~]# cat 8.sh
#!/bin/bash
num=1
ta9()
{
num2=$[num*23]
}
ta9
echo $num2
[root@linus ~]# sh 8.sh
23
其實最常用的還是直接使用和將函數賦值給變量這兩種,其他類型也有用到,建議都知道,畢竟多多益善嘛
關於函數的退出
使用return即可退出函數
格式:return 返回值
可以使用$?查看退出值,和exit一樣,如果不加,執行結束後就會退出函數。
return是專門用來退出函數的命令,與其對應的是專門用來退出腳本的命令exit。反着使用,不僅會報錯,還會讓腳本執行不完全。例如:
[root@linus ~]# cat 7.sh
#!/bin/bash
echo "這是第一個顯示"
return 1 #這行產生報錯
echo "這是第二個顯示"
ta8()
{
echo "這是第三個顯示"
exit 1 #直接退出了腳本,沒有執行後續命令
echo "這是第四個顯示"
}
ta8
echo "這是第五個顯示"
[root@linus ~]# sh 7.sh
這是第一個顯示
7.sh: 第 3 行:return: 只能從函數或者源腳本`返回'
這是第二個顯示
這是第三個顯示
說其是專門,那麼自然有其在各自使用的環境中的作用。先說說exit,我們一般使用exit時,基本上需求都是直接退出腳本,而換成return,又不能直接退出腳本,而且還會報錯。而在函數中使用return,只是結束函數中的命令,如果使用exit,則會把腳本全部退出。
以下爲正常使用:
[root@linus ~]# cat 9.sh
#!/bin/bash
ta10()
{
echo "函數要退出咯"
return 1
echo "函數沒退出成功嗎?"
}
ta10
echo "腳本要退出咯"
exit 1
echo "腳本沒退出成功嗎?"
[root@linus ~]# sh 9.sh
函數要退出咯
腳本要退出咯