函式是乙個指令碼**塊,由使用者對其自定義,可以在指令碼的任意位置建立,按照格式將命令寫入到函式中,系統不會直接執行函式中的命令。
如果想要這個函式,只要呼叫這個函式的名稱(只需要輸入名稱)就可以了,而且可以在指令碼的任意位置呼叫,使用函式的好處在於模組化以及**可讀性強。
function 函式名稱() #()可以省略
或者函式名稱() #()不能省略
function可以省略,函式名稱必須要有,()裡面為空,{}中間就是我們執行的命令。
但要注意,函式名稱在指令碼中必須唯一,若實在是有兩個重名,則會以最後乙個為準,這就導致有乙個函式沒有執行。所以說,這種函式名稱相同的錯誤,不要讓其發生。
[root@linus ~]
# cat 1.sh
#!/bin/bash
ta1(
)function ta1
ta1[root@linus ~]
# sh 1.sh
world
直接寫好函式,然後輸入名稱直接呼叫,這種方式是最基本的函式使用方法,不再演示。
可以在乙個函式中呼叫另乙個已經存在的函式
[root@linus ~]
# cat 3.sh
#!/bin/bash
ta3(
)ta4(
)ta4
[root@linus ~]
# sh 3.sh
這是第乙個函式
這是第二個函式
可以把乙個已有的函式,像命令一樣賦值給變數
[root@linus ~]
# cat 5.sh
#!/bin/bash
ta5()a=
`ta5`
echo
"$a"
[root@linus ~]
# sh 5.sh
這是乙個函式
函式無法從指令碼中直接訪問指令碼引數值。如果想在函式中使用這些值,那麼必須在呼叫該函式時手動傳遞這些資料。
[root@linus ~]
# sh 111 222
sh: 111: 沒有那個檔案或目錄
[root@linus ~]
# cat 6.sh
#!/bin/bash
ta6(
)ta7=
`ta6 $1 $2`
echo
$ta7
[root@linus ~]
# sh 6.sh 111 222
24642
函式可以呼叫已有的變數,函式執行後,函式中的變數也可在指令碼中使用
[root@linus ~]
# cat 8.sh
#!/bin/bash
num=1
ta9(
)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(
)ta8
echo
"這是第五個顯示"
[root@linus ~]
# sh 7.sh
這是第乙個顯示
7.sh: 第 3 行:return: 只能從函式或者源指令碼`返回'
這是第二個顯示
這是第三個顯示
說其是專門,那麼自然有其在各自使用的環境中的作用。先說說exit,我們一般使用exit時,基本上需求都是直接退出指令碼,而換成return,又不能直接退出指令碼,而且還會報錯。而在函式中使用return,只是結束函式中的命令,如果使用exit,則會把指令碼全部退出。
以下為正常使用:
[root@linus ~]
# cat 9.sh
#!/bin/bash
ta10(
)ta10
echo
"指令碼要退出咯"
exit 1
echo
"指令碼沒退出成功嗎?"
[root@linus ~]
# sh 9.sh
函式要退出咯
指令碼要退出咯
SHELL指令碼函式
shll作為指令碼語言,也有自己的函式。但是他有許多與其他語言不同的特點 在這裡,定義了乙個函式,有2個引數,第乙個 陣列,第二個 單個值。這個函式的作用是判斷第二個引數的值是否在第乙個引數 陣列 裡面。bin sh 定義函式 fun function contain do ta array ech...
shell指令碼 函式
函式function是由若干條shell命令組成的語句塊,實現 重用和模組化程式設計。它與shell程式形式上是相似的,不同的是它不是乙個單獨的程序,不能獨立執行,而是shell 程式的一部分。函式和shell程式比較相似,區別在於 shell 程式在子shell中執行 而shell函式在當前she...
Shell指令碼語法 函式
bin sh foo echo start fooecho end 注意函式體的左花括號寫在同一行,命令末尾必須有 號。在定義foo 函式時並不執行函式體中的命令,就像定義變數一樣,只是給foo這個名字乙個定義,到後面呼叫foo函式的時候 注意shell中的函式呼叫不寫括號 才執行函式體中的命令。s...