shell腳本:函數

函數

函數是一個腳本代碼塊,由用戶對其自定義,可以在腳本的任意位置創建,按照格式將命令寫入到函數中,系統不會直接執行函數中的命令。

如果想要這個函數,只要調用這個函數的名稱(只需要輸入名稱)就可以了,而且可以在腳本的任意位置調用,使用函數的好處在於模塊化以及代碼可讀性強。

語法


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 
函數要退出咯
腳本要退出咯
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章