一、自定義函數
1、基本語法
[ function ] funname[()]
{
Action;
[return int;]
}
funname
#!/bin/bash
function aaa()
{
echo aaa
}
aaa;
#結果
chmod +x fun.sh
./fun.sh
aaa
也可以寫成這樣:省略function和()其中一個,不能兩個同時省略。
(1)省略()
#!/bin/bash
function aaa
{
echo aaa
}
aaa;
#結果
./fun.sh
aaa
(2)省略function
#!/bin/bash
aaa()
{
echo aaa
}
aaa;
#結果
./fun.sh
aaa
(3)求兩個數的和:
#在命令行輸入
plus()
> {
> echo $[$1+$2]
> }
#調用
plus 1 2
3
(4)判斷參數個數:
#命令行輸入
plus()
> {
> if [ $# -lt 2 ]
> then
> echo "參數不足2個"
> exit
> else
> echo $[$1+$2]
> fi
> }
#調用
plus 22 33
55
#直接退出當前連接
plus 22
參數不足2個
logout
Connection closing...Socket close.
Connection closed by foreign host.
注意事項:
(1)shell腳本就是多條命令行的集合,逐行運行。也就是說,shell腳本中的內容是可以在命令行輸入執行的。函數必須先定義,並且放在調用語句之前,才能正常執行。先聲明,後調用。
(2)定義函數時,()不能有參數。參數是在調用時指定。
2、返回值
函數返回值,返回函數執行狀態,不能返回結果。只能通過$?系統變量獲得,可以顯示加return返回。如果不加,則以最後一條命令的運行結果,作爲返回值。return後跟數值n(0~255)
使用$?獲取函數返回值:
aaa()
> {
> echo aaa
> return 2
> }
結果:
aaa
aaa
echo $?
2
如果返回不在0~255的數,會怎樣:
aaa() { echo aaa; return 999999; }
#結果
aaa
aaa
echo $?
63
二、shell 系統函數
1、basename
基本語法
basename [string / pathname] [suffix]
功能描述:basename以 / 做分隔符,獲取最後一個分割的字符串。如果指定了後綴,則後綴將會從最後一個字符串中去掉。
#獲取文件名及後綴
basename /root/a.sh
a.sh
basename /root/a.sh sh
a.
#獲取文件名
basename /root/a.sh .sh
a
#後綴與最後一個分割的字符串相同,後綴不起作用
basename /root/a.sh a.sh
2、dirname
基本語法
dirname 文件或者目錄絕對路徑
功能描述:獲取文件或者目錄完整路徑,去掉文件名或者目錄
dirname /root/a.sh
/root
#hello是一個文件
#-rw-r--r-- 1 root root 0 Mar 22 12:56 hello
dirname /usr/local/bin/hello
/usr/local/bin
#a是一個目錄
#drwxr-xr-x 2 root root 4096 Mar 22 12:57 a
dirname /usr/local/bin/a
/usr/local/bin