Shell Notes(2)

來源:互聯網
上載者:User

> 數組

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就會把自己的診斷資訊寫到標準輸出。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.