Linux Shell學習筆記九

來源:互聯網
上載者:User

12.3 Shell指令碼中的選項分析

第一種方式,使用case語句手工處理選項。

第二種方式,使用getopts命令分析選項

文法格式:

getopts option-string variable

option-string是包含所有單字元選項的字串,這些字元就是getopts要進行分析的。

這些選項應該被賦予一個變數,變數variable就是被賦值變數的變數名。

 

getopts對命令列所給出的選項進行分析,分析過程為:

1)getopts選項檢查所有命令列參數,找到以"-"字元開頭的字元。

2)當找到以"-"字元開頭的參數後,將跟在"-"字元後的字元與在option-string中的給出的字元進行比

 

較。

3)若找到匹配,指定的變數variable被設定成選項,否則variable被設定成"?"字元。

4)重複1-3直到遍曆完搜尋選項

5)當分析完後,getopts返回非零值並推出。

getopts的另一個特徵是它可以指出需要額外參數的選項。在option-string中的選項後加上一個":"

字元就可以實現這一功能。在這種情況下,選項被分析後,額外的參數被設定成變數OPTARG的值。

 

使用getopts

while f:o:v OPTION:

do

case "$OPTION" in

f) F=$OPTION ;;

o) O=$OPTION ;;

v) V=$OPTION ;;

*) echo "$USAGE" ;

  exit 1

  ;;

esac

done

 

 

第12學時  輸入/輸出

當命令產生寫向終端的輸出時,就稱程式將它的輸出列印到標準輸出(STDOUT)。

出錯資訊並不寫向STDOUT,它們寫向一個特殊的類型輸出上,該輸出稱為標準錯誤輸出(STDERR),

它是為出錯資訊保留的。

 

13.1.1 向終端輸出

1)echo

2)printf

 

13.1.2 輸出重新導向

在Shell指令碼中,常常需要俘獲命令的輸出並將其存入檔案。當輸出儲存在檔案中時,可以很方便地對其

 

進行編輯和修改。

重新導向操作符 ">","<"

 

">"符號重新導向會覆蓋原有檔案裡的資料,使用時需要注意。

如果需要在原有基礎上增加資料,可以使用">>"追加資料到檔案的尾部。

 

 

向檔案和螢幕重新導向輸出

在某些情況下,需要同時向檔案和終端重新導向指令碼的輸出。可使用tee命令。

例如:$ date | tee now

在終端上輸出當前日期,並將資料寫入檔案nowzhong。

 

13.2 輸入

1)將輸入重新導向到檔案,從而從檔案中讀取輸入。

2)從使用者讀取輸入。

3)將一個命令的輸出重新導向到另一個命令的輸入。

 

13.2.1 輸入重新導向

command < file

 

13.2.2 讀取使用者輸入

Shell指令碼的常見任務之一就是提示使用者輸入,然後讀取使用者的響應。

格式:

read name

它讀取使用者輸入的一整行,直到使用者輸入斷行符號鍵為止,它使得該行成為由name所制定變數的值。

例如:

YN=yes

printf "Do you want to play a gane [$YN]?"

read YN

case $YN in

[yY]) echo yes ;;

*) echo "maybe later." ;;

esac

 

13.2.3 管道

UNIX中處理檔案的命令大多都能從STDIN中讀取輸入,這使得使用者可以使用一個程式過濾另一個程式的輸

 

出。

使用管道可以將一個命令的輸出重新導向到另一個命令的輸入。管道使用可以將幾個命令連在一起。

例如:$ who | grep sudo

將who命令的輸出作為下一個命令的輸入,再進行過濾輸出到終端。

 

13.3 檔案描述符

標準輸入(STDIN)0

標準輸出(STDOUT) 1

標準錯誤(STDERR) 2

 

command 1>file1 2>file2

給定command的STDOUT重新導向到file1,STDERR(錯誤資訊)重新導向到file2

 

for FILE in $FILES

do

ln -s $FILE ./docs >> /tmp/ln.log 2> /dev/null

這裡ln的STDOUT增加到檔案/tmp/ln.log中,STDOUT重新導向到檔案的/dev/null中

 

注意:檔案/dev/null是所有UNIX系統中都能使用的用於刪除輸出的一個reshuffle檔案。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.