函數
函數定義
[ function ] funname [()] { action; [return int;] }
定義時可以是function fun(),也可以直接fun(),不帶參數
返回值不顯式返回時,以最后一條命令運行結果作為返回值。return后為數值,范圍0-255
帶返回值的示例
#!/bin/bash funWithReturn(){ echo "這個函數會對輸入的兩個數字進行相加運算..." echo "輸入第一個數字: " read aNum echo "輸入第二個數字: " read anotherNum echo "兩個數字分別為 $aNum 和 $anotherNum !" return $(($aNum+$anotherNum)) } funWithReturn echo "輸入的兩個數字之和為 $? !"
$?可以獲取到函數返回值
函數定義必須放在腳本開始部分,所有函數必須使用前就定義
函數參數定義使用$n。也就是說$1表示第一個參數,$2表示第二個參數
#!/bin/bash funWithParam(){ echo "第一個參數為 $1 !" echo "第二個參數為 $2 !" echo "第十個參數為 $10 !" echo "第十個參數為 ${10} !" echo "第十一個參數為 ${11} !" echo "參數總數有 $# 個!" echo "作為一個字符串輸出所有參數 $* !" } funWithParam 1 2 3 4 5 6 7 8 9 34 73
$10輸出是10。n >= 10時不能直接$n,得寫成${n}
特殊字符
$#:參數個數
$*:參數列表(字符串形式)
$$:腳本運行的最后一個進程的ID號
$!:后台運行的最后一個進程的ID號
$@:和$*相同,不同的是使用時要加引號,在引號內返回每個參數
$-:顯示Shell使用的當前選項,與set命令功能相同
$?:顯示最后命令的退出狀態,0表示沒錯誤,其他值表示有錯誤
輸入/輸出重定向
command > file:輸出到file
command < file:從file輸入
command >> file:輸出到file(append)
n > file:將文件描述符為n的文件重定向到file
n >> file:將文件描述符為n的文件重定向到file(append)
n >& m:將輸出文件m和n合並
n <& m:將輸入文件m和n合並
<< tag:將開始標記tag和結束標記tag之間的內容作為輸入
文件描述符:
內核(kernel)利用文件描述符(file descriptor)來訪問文件。文件描述符是非負整數。打開現存文件或新建文件時,內核會返回一個文件描述符。讀寫文件也需要使用文件描述符來指定待讀寫的文件。
文件描述符 0 通常是標准輸入(STDIN),1 是標准輸出(STDOUT),2 是標准錯誤輸出(STDERR)。
重定向
一般情況下,每個 Unix/Linux 命令運行時都會打開三個文件:
- 標准輸入文件(stdin):stdin的文件描述符為0,Unix程序默認從stdin讀取數據。
- 標准輸出文件(stdout):stdout 的文件描述符為1,Unix程序默認向stdout輸出數據。
- 標准錯誤文件(stderr):stderr的文件描述符為2,Unix程序會向stderr流中寫入錯誤信息。
默認情況下,command > file 將 stdout 重定向到 file,command < file 將stdin 重定向到 file。
未完待續