很久沒更新了,很久沒看指令碼了
想想應該繼續看指令碼了
#14 Formatting Long Lines
#!/bin/sh# A version of fmt, using nroff. Adds two useful flags: -w X for line width# and -h to enable hyphenation for better fills.while getopts "hw:" opt; do case $opt in h) hyph=1 ;; w) width="$OPTARG" ;; esacdoneshift $(($OPTIND - 1))nroff << EOF.ll ${width:-72}.na.hy ${hyph:-0}.pl 1$(cat "$@")EOFexit 0
上面指令碼是用來格式化輸出軟體的
主要用到了 getopts 來獲得處理參數
我們的命令列下的統一格式為 :
command -options parameters
getopts語句。該語句的格式為:
getopts option_string variable
其中option_string中包含一個有效單字元選項。若getopts命令在命令列中發現了連字號,
那麼它將用連字號後面的字元同option_string相比較。若有匹配,則把變數variable的值設為該選項。
若無匹配,則variable設為?。當getopts發現連字號後面沒有字元,會返回一個非零的狀態值。
Shell程式中可以利用getopts的傳回值建立一個迴圈。
有時侯選項中還帶一個值,getopts命令同樣也支援這一功能。這時需要在option_string中選項字母后加一個冒號。當getopts命令發現冒號後,會從命令列該選項後讀取該值。若該值存在,那麼將被存在一個特殊的變數OPTARG中。如果該值不存在,getopts命令將在OPTARG中存放一個問號,並且在標準錯誤輸出上顯示一條訊息。
------------
optstring option字串,會逐個匹配
varname 每次匹配成功的選項
arg 參數列表,沒寫時它會取命令列參數列表
$OPTIND 特殊變數,option index,會逐個遞增, 初始值為1
$OPTARG 特殊變數,option argument,不同情況下有不同的值
------------
shift 用於重新分配位置參數,其實就是把向參數左移動一個位置如:$1<--$2,$2<--$3老的$1將被刪 除掉。
------------
指令碼解釋
shift $(($OPTIND - 1)) 會使$@變為最後一個參數,即為檔案名稱。
${width:-72},${hyph:-0} 用來定義預設值的。
nroff現在很少用了,查資料發現是用來將文字檔格式化為行式印表機或終端螢幕所需要的形式。
感覺這指令碼的用處不是很大,linux有現成的命令可以來完成這個功能
他就是fmt。