1. 程式人生 > >shell函數【參數傳遞及輸入輸出】&內置函數

shell函數【參數傳遞及輸入輸出】&內置函數

無效 -s 常見 net 功能 出現 系統環境 osc 環境

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函數【參數傳遞及輸入輸出】&內置函數