shell函數【參數傳遞及輸入輸出】&內置函數
Linux——shell腳本基礎3:shell函數【參數傳遞及輸入輸出】&內置函數
函數定義 1
退出狀態 1
參數傳遞 2
標準IO 2
腳本調試 2
AND&OR 3
內置命令補充 3
函數定義
函數定義: |
在Shell 中,函數就是一組命令集或語句形成一個可用塊 函數增強了shell的可編程能力 |
組成 |
function_name(){ statements }
函數名(在一個腳本中必須唯一) 函數體(命令集合) |
註意 |
shell中不存在向前聲明(先定義後使用) 必須在調用一個函數之前對它進行定義 函數可以定義自己內部使用的變量:local 像使用命令一樣調用函數 |
eg |
function copyfile() { local srcfile=$1 local dstfile=$2 cp $srcfile $dstfile return 0 # always return success } copyfile /tmp/myconf /etc/sysconf |
調用 |
function_name params
可以通過return命令讓函數返回數字值,或者echo一個字符串返回 |
參數傳遞
參數傳遞: |
參數使用與位置參數一樣 $1, $2, …… $@, $* $# func $var1 $var2 註:變量中間用空格、Tab分割 |
返回值 |
return:主要用來返回退出狀態,即$? 0 <= 返回值(整數) <= 255; 0 為無錯誤; 非0 為有錯誤; 註:如果返回其他數據,可以使用echo或者全局變量 return_var=`func $var1 $var2`
|
退出狀態
退出狀態(exit status): |
|
函數返回一個被稱為退出狀態的值. 退出狀態可以由return 來指定statement, 否則函數的退出狀態是函數最後一個執行命令的退出狀態(0 表示成功,非0 表示出錯代碼). 可以在腳本中由$? 引用
退出值為 0 表示成功 退出值非 0 表示失敗 當一個命令因為嚴重的信號 N 退出時,bash 將使用 128+N 作為它的退出狀態 |
|
出現一個信號 |
128及以上 嚴重的信號 N 退出 |
命令沒找到: |
127 |
文件找到但不可執行: |
126 |
展開或重定向中的錯誤:腳本程序可使用的錯誤代碼 |
1-125 |
所有的內建命令在用法錯誤時返回 |
2 |
成功 |
0 |
內置命令補充
內置命令補充: |
:命令 |
冒號(:)是一個空命令,偶爾用於簡化條件邏輯,相當於true的一個別名。 例如 while : 也用於在變量的條件設置中 例如 : ${var:=value} if ….;then : fi |
.命令 |
用於在當前shell中執行命令 . ./shell_script 相當於source命令 在執行腳本程序中列出的命令時,使用的是調用該腳本程序的同一個shell
|
續行符\[enter] |
必須是行的最後一個字符 用於統一命令跨多行
|
echo命令 |
輸出結尾帶有換行符的字符串 echo –n “string to output” bash風格去換行符 |
eval命令 |
允許對參數進行求值,是shell的內置命令 即允許代碼被隨時生成和運行 |
exec命令 |
兩種用法 典型:將當前shell替換為一個不同的程序 exec wall “Thanks for all the fish”
第二種用法修改當前文件描述符 exec 3 < afile |
exit n命令 |
使腳本程序以退出碼n結束運行 若是在腳本退出時不指定退出狀態,那麽該腳本最後一條被執行命令狀態將被用作返回值 |
export命令 |
功能說明:設置或顯示環境變量。 語 法:export [-fnp][變量名稱]=[變量設置值] 參 數: -f 代表[變量名稱]中為函數名稱。 -n 刪除指定的變量。變量實際上並未刪除,只是不會輸出到後續指令的執行環境中。 -p 列出所有的shell賦予程序的環境變量
註意: 1、執行腳本時是在一個子shell環境運行的,腳本執行完後該子shell自動退出; 2、一個shell中的系統環境變量才會被復制到子shell中(用export定義的變量); 3、一個shell中的系統環境變量只對該shell或者它的子shell有效,該shell結束時變量消失(並不能返回到父shell中)。 4、不用export定義的變量只對該shell有效,對子shell也是無效的。
補充說明: 1.在shell中執行程序時,shell會提供一組環境變量。export可新增,修改或刪除環境變量,供後續執行的程序使用。export的效力僅及於該此登陸操作。 2. export把自己的參數創建為一個環境變量,而這個環境變量可以被當前程序調用的其他腳本和程序看見 被導出變量構成從該shell衍生的任何子進程的環境變量
|
expr命令 |
格式; expr argu operator argu [必帶空格] 將它的參數當做一個表達式來求值,最常見用法簡單數學運算 x=`expr $x + 1` 註意,運算符兩邊空格必須 x=$(expr $x + 1)
例子: 1. 直接計算 $expr 10 + 10 $expr 30 / 3 $expr 30 \* 3 【必須轉義】 2. 增量計算 $LOOP=10 $LOOP=`expr $LOOP + 1` //反引號 3. 數值測試 可用expr測試是否為數字 $VALUE=12 $expr $VALUE + 10 > /dev/null 2>&1 $echo $? 0 4. expr本身的退出狀態 註:返回值與系統退出命令恰好相反 $VALUE=”hello” $expr $VALUE = “hello” 1 $echo $? 0 5. 模式匹配及抽取 $VALUE=”hello” $expr $VALUE : ‘.*’ 5 抽取 $VALUE=”account.doc” $expr $VALUE : ‘.?.doc’ account |
let命令 |
系統默認“+”是作為字符串處理的,因此它不會被作為一個操作符,而只是被識別為一個普通的字符串
使用let強制為數字 $ d=111 $ echo $d+1 111+1 $ let d=$d+1; echo $d 112
|
printf命令 |
格式化輸出 d 十進制 C 一個字符 S 一個字符串 % 一個%字符
printf “%s\n” hello printf “%s %d” “Hi” 6
|
return命令 |
使函數返回,可有一個數值參數,作為該函數的返回值,如果不帶參數,return命令默認返回最後一條命令的退出碼 |
set命令 |
為shell設置參數變量 set $(date) echo The month is $2
即參數的值作為當前腳本參數列表了 |
shift命令 |
把所有參數變量左移一個位置,是$2->$1 $3->$2原來$1被丟棄,$0保持不變 可帶參數表示左移一個數值參數
|
trap命令 |
用於指定接收到信號後要采取的行動 常見用途:在腳本程序被中斷時完成清理工作 trap command signal 註:腳本程序通常是從上到下順序解釋執行的,必須在想保護那部分代碼之前指定trap命令 HUP(1) 掛起,中斷掉線或用戶退出 引發 INT(2)中斷 ctrl+c組合鍵發生 QUIT(3)退出,ctrl+\組合鍵發生 ABRT(6)中止,默寫嚴重的執行錯誤引發 ALRM(14)報警,用來處理超時 TERM(15)終止,系統關機時發出
|
unset命令 |
從環境變量中刪除變量或函數 不能刪除shell本身定義的只讀變量 |
FROM: http://my.oschina.net/hanzhankang/blog/202724
shell函數【參數傳遞及輸入輸出】&內置函數