> 數組
NAMES=(max helen sam zach)
NAMES[*] 取出所有資料,然後作為一個元素返回
NAMES[@] 取出所有資料,但是返回的仍然是一個數組,可以用來完成數組的賦值
> export
使父進程的變數對子進程可見、可用;一旦利用expert生命一個變數作為參數,shell就會把變數的值傳遞到子進程得到調用環境中,使用的是傳值調用 每個子進程在使用變數時得到變數的副本。
eg. export cheese=american
或 cheese=american
export cheese
> typeset
函數內,局部變數用typeset修飾,避免重名
------------------------------------------------常用到的特殊參數-----------------------------------------------
> $$
當前啟動並執行進程的PID
> $!
$!儲存了後台啟動並執行進程的PID
> $?
進程的退出狀態,或者叫命令啟動並執行返回狀態代碼,可以通過檢測$?,判斷啟動並執行結果
> $#
命令列上,除了命令之外的參數的個數
> $0
執行程式的命令的名稱
> $1~$n
命令列參數
> $*
命令列參數的列表,包含了所有的命令列參數。$* 是一個參數,即:所有的命令列參數作為一個元素,整體地被輸出。
> $@
類似於$* , 也返回命令忙參數的列表,不同的是,$@返回的是一個列表,一組元素,命令列參數作為一個列表返回,每個命令列參數是獨立的。
注意:$*與$@在加" "的條件下,才顯示出不同來
---------------------------------------------------------------------------------------------------------------------
> set
初始化命令列參數變數。set將set後面跟的一個或幾個參數賦值給位置參數。
> read
內建命令,讀入使用者輸入,將內容儲存到使用者指定的變數中。eg. read filename
如果不想指定一個變數儲存read的輸入內容,可以這樣:read –p “Input:”。然後read 到的內容儲存到了$REPLY變數中,echo "$REPLY" 可以查看讀到的內容。其中,選項“-p ”來顯示使用者的提示。“Input:”只是一個輸入提示,可以為“”,但是不能沒有。
read –p “prompt” 後面可以跟一個變數,存取讀到的內容,也可以不加變數,讀到的值通過$REPLY獲得。
也可以跟多個變數,read輸入的時候,用空格隔開。
如果輸入的變數個數少於指令碼指定的個數,未賦值的變數為空白:
如果輸入變數個數多餘指令碼指定的個數,多出來的輸入值都作為最後一變數的內容:
> 使用read讀取檔案
注意:是在while語句的末尾,也就是done後面,使用重新導向“<”,將待掃描的檔案名稱作為輸入。
> exec
主要兩個目的:1、在不用建立一個新進程來執行一個命令;2、重新導向來自shell指令碼內部的檔案描述符
>/dev/tty
表示使用者的工作螢幕。
發往/dev/tty裝置的資訊不會被轉移(不會重新導向來自指令碼的標準輸出和錯誤輸出)。即使使用了標準輸出重新導向,發往/dev/tty的資料也會照常顯示。
> trap
捕捉在指令碼啟動並執行時候發生的訊號,便於使用者在接收到訊號後即使採取措施。
格式:trap ['commads'] [signal]
當捕捉到訊號signal後,執行命令commands。如果要屏蔽某些訊號,commands為空白' '。
常用訊號6個:1(掛起),2(中斷Ctrl+C),3(退出),9(結束),15(軟體中斷),20(停止Ctrl+Z)
屏蔽多個訊號時,空格隔開即可。eg. trap ' ' 1 2 3 15
trap可以用來在指令碼運行中捕捉訊號,也可以用來在運行結束後,做一些清理工作。eg.
> getopts
藉助這個工具,可以實現給自己寫的指令碼配置選項。
我覺得,getopts就是一個在shell裡被調用的一個工具,專門用來處理$1~$n,省去人手動地對$*的解析,將$1~$n輸入給getopts,他就可以按照 選項、參數 把$0~$n解析出來,後面,直接使用getopts輸出的結果就可以了。
看下面的例子:
getopts的使用格式: getopts optstring varname
如例子中的,getopts 處理的選項串為 :bt:uw: ,以“:”開頭,表示由指令碼負責產生錯誤資訊,也就是屏蔽了getopts的錯誤輸出
t和w後面加“:”表示這兩個選項需要輸入參數。
getopts按照類似迴圈的方式,處理選項串,用到了兩個特殊的變數OPTIND(選項索引),OPTARG(選項參數)。OPTIND從1開始,getopts每發現一個參數,OPTIND就加1 .
由,可見,getopts讀取了$0~$n的全部:因為-b 的OPTIND 為2 。
當getopts發現一個非法的選項時,將varname置為?,並發OPTARG設為選項字母;
當getopts發現一個選項缺少參數,將varname置為:,並把OPTARG設為缺少參數的選項。
如果忽略optstring開頭的:,則不管是非法選項還是丟失參數,都會使varname為?:,如果OPTARG變數沒有設定,getopts就會把自己的診斷資訊寫到標準輸出。