*20231113?補充了實例使用for循環(huán)來簡化代碼的內容
為了實現模塊化設計和代碼重用,很多編程語言支持函數或過程,Linux shell也支持函數定義和調用。
Linux shell中的函數與其它編程語言很多有相似之處,也有自己獨特之處。
1?函數的定義
1.1 標準格式
function?函數名()
{
? ? 語句或命令1
? ? ?……
? ? 語句或命令n
??? [return?返回值]
}
其中:
- function是 Shell 中的關鍵字,專門用來定義函數;
- 由{ }包圍的部分稱為函數體,調用一個函數,實際上就是執(zhí)行函數體中的代碼。
- return 是 Shell 關鍵字,專門用在函數中返回一個值;如果不用返回值,這一句也可以不寫。
這個格式是不是與JavaScript的函數定義格式很像?
?
1.2?簡化格式
在實際實用中,還有兩種簡化格式:
1.2.1? 簡化格式1——省略function關鍵字
我們可以把function關鍵字省略不寫,就有了下面這種簡化格式:
函數名()
{
? ? 語句或命令1
? ? ?……
? ? 語句或命令n
??? [return?返回值]
}
1.2.2? 簡化格式2——省略函數名后面的小括號
如果我們寫了 function 關鍵字,也可以省略函數名后面的小括號,就有了下面這種簡化格式:
function?函數名
{
? ? 語句或命令1
? ? ?……
? ? 語句或命令n
??? [return?返回值]
}
1.3?建議
建議使用1.1的標準格式,保持與其它編程語言的書寫兼容性。
2?函數的參數
2.1?函數在定義時不能指明參數
盡管Linux Linux Shell中的函數定義格式與JavaScript的函數定義格式很像,但它也在有自己的特別之處,那就是函數在定義時不能指明參數,但是在調用時卻可以傳遞參數,并且給它傳遞什么參數它就接收什么參數。
2.2?函數體內使用參數信息的方式
函數體內腳本內獲取參數的格式為:
${n}
其中n?代表一個數字,0為執(zhí)行腳本的命令行命令, 1 為執(zhí)行腳本的第一個參數,2 為執(zhí)行腳本的第二個參數,依此類推……
- 當n > 10時,可以省略{},簡寫為$n。
- 當n>=10時,務必使用${n}
除此之外,還有幾個特殊的參數處理信息:
參數處理 | 說明 |
---|---|
$# | 傳遞到腳本的參數個數 |
$* | 以一個單字符串顯示所有向腳本傳遞的參數。 如"$*"用「"」括起來的情況、以"$1 $2 … $n"的形式輸出所有參數。 |
$@ | 與$*相同,但是使用時加引號,并在引號中返回每個參數。 如"$@"用「"」括起來的情況、以"$1" "$2" … "$n" 的形式輸出所有參數。 |
$$ | 腳本運行的當前進程ID號 |
$! | 后臺運行的最后一個進程的ID號 |
$- | 顯示Shell使用的當前選項 |
$? | 顯示最后命令的退出狀態(tài)。0表示沒有錯誤,其他任何值表明有錯誤。 |
3?函數的執(zhí)行(調用)
格式:
函數名?[參數1?參數2 ……?參數n]
與JavaScript一樣,Linux Shell?對函數定義和調用的順序不做限制,你可以將定義放在調用的前面,也可以反過來,將定義放在調用的后面。
但是,與JavaScript不同的地方:
- 函數名后面不用()。
- 如果要傳遞參數,那么參數以空格分隔。
4.函數定義和調用實例
我們定義一個函數x:
function x()
{
echo cmd: $0;
echo param number:$#;
echo they are $@;
echo 1-$1;
echo 2-${2};
echo 3-$3;
echo 4-$4;
echo 5-$5;
echo 6-$6;
echo 7-$7;
echo 8-$8;
echo 9-$9;
echo 10-${10};
return 0;
};
在函數體中:
- 我們用echo命令首先顯示命令行命令($0)
- 然后顯示命令行參數個數($#)
- 接著我們顯示所有的命令行參數($@)
- 然后我們逐個顯示每個參數
- 最后我們用return語句返一個值0
4.1 bash中
csdn @edu bash $ function x() {echo cmd: $0; echo param number:$#; echo they are $@; echo 1-$1; echo 2-${2}; echo 3-$3; echo 4-$4; echo 5-$5; echo 6-$6;echo 7-$7; echo 8-$8; echo 9-$9; echo 10-${10}; return 0;}; x a1 b2 c3 d4 e5 f6 h7 i8 j9 k10; echo exit code: $?
bash: syntax error near unexpected token `{echo'
csdn @edu bash $ function x() { echo cmd: $0; echo param number:$#; echo they are $@; echo 1-$1; echo 2-${2}; echo 3-$3; echo 4-$4; echo 5-$5; echo 6-$6;echo 7-$7; echo 8-$8; echo 9-$9; echo 10-${10}; return 0;}; x a1 b2 c3 d4 e5 f6 h7 i8 j9 k10; echo exit code: $?
cmd: bash
param number:10
they are a1 b2 c3 d4 e5 f6 h7 i8 j9 k10
1-a1
2-b2
3-c3
4-d4
5-e5
6-f6
7-h7
8-i8
9-j9
10-k10
exit code: 0
csdn @edu bash $?
在命令行中,我們先定義了函數x,然后調用函數x并參遞了參數10個參數:
x a1 b2 c3 d4 e5 f6 h7 i8 j9 k10
最后我們使用命令
echo exit code: $?
顯示函數x的返回值為0
在bash的命令行中,函數體開始的{和后面的命令或語句要用空格分隔。
4.2 zsh中
csdn @ edu zsh $ function x() {echo cmd: $0; echo param number:$#; echo they are $@; echo 1-$1; echo 2-${2}; echo 3-$3; echo 4-$4; echo 5-$5; echo 6-$6;echo 7-$7; echo 8-$8; echo 9-$9; echo 10-${10}; return 0;}; x a1 b2 c3 d4 e5 f6 h7 i8 j9 k10; echo exit code: $?
cmd: x
param number:10
they are a1 b2 c3 d4 e5 f6 h7 i8 j9 k10
1-a1
2-b2
3-c3
4-d4
5-e5
6-f6
7-h7
8-i8
9-j9
10-k10
exit code: 0
代碼跟在bash中是一樣的,但是zsh的命令行中不要求函數體開始的{和后面的命令或語句用空格分隔。
4.3?使用for循環(huán)來簡化代碼
上面的實例中,要逐個輸出參數,我們還可以使用for語句來進行簡化。
function x()
{
echo cmd: $0;
echo param number:$#;
echo they are $@;
j=1;
for i in $@
do
echo $j-$i;
((j++));
done
return 0;
};
4.3.1?在bash中
csdn @ edu bash $ function x(){ echo cmd: $0; echo param number:$#; echo they are $@; j=1; for i in $@; do echo $j-$i; ((j++));done;return 0; };x a1 b2 c3 d4 e5 f6 h7 i8 j9 k10; echo exit code: $?
cmd: bash
param number:10
they are a1 b2 c3 d4 e5 f6 h7 i8 j9 k10
1-a1
2-b2
3-c3
4-d4
5-e5
6-f6
7-h7
8-i8
9-j9
10-k10
exit code: 0
4.3.2 在zsh中
csdn @ edu zsh $ function x(){ echo cmd: $0; echo param number:$#; echo they are $@; j=1; for i in $@; do echo $j-$i; ((j++));done;return 0; };x a1 b2 c3 d4 e5 f6 h7 i8 j9 k10; echo exit code: $?
cmd: x
param number:10
they are a1 b2 c3 d4 e5 f6 h7 i8 j9 k10
1-a1
2-b2
3-c3
4-d4
5-e5
6-f6
7-h7
8-i8
9-j9
10-k10
exit code: 0文章來源:http://www.zghlxwxcb.cn/news/detail-751811.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-751811.html
到了這里,關于Linux shell編程學習筆記24:函數定義和使用的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!