又見101個shell指令碼

2021-09-20 16:35:08 字數 1594 閱讀 4613

很久沒更新了,很久沒看指令碼了

想想應該繼續看指令碼了

#!/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" ;;

esac

done

shift $(($optind - 1))

nroff << eof

.ll $

.na.hy $

.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))  會使$@變為最後乙個引數,即為檔名。

$,$ 用來定義預設值的。

nroff現在很少用了,查資料發現是用來將文字檔案格式化為行式印表機或終端螢幕所需要的形式。

感覺這指令碼的用處不是很大,linux有現成的命令可以來完成這個功能

他就是fmt。

讀書筆記 101個shell指令碼 之 9

這次的shell案例比較簡單,但有其特點。bin sh if 1 p then precision 2 shift 2 else precision 2 default fibc q eof scale precision quit eofexit 0 指令碼特點 1 指令碼整體簡潔明瞭,但功能強大...

Shell程式設計 101

shell程式設計是從事linux運維同學的必備技能,靈活運用shell 指令碼可以大大減少日常重複性的維護工作,也是自動化運維的早期體現形式。在日常工作中,經常有運維同學反映shell難學,語法難記憶。其實在我看來,學習任何技術都是要結合場景進行實踐練習的。前期可以通過快速入門基礎語法知識,結合一...

shell指令碼練習 每天乙個shell指令碼 7

我的部落格都是依照自己淺薄的現有知識去寫的,好多時候寫完了部落格,去查詢答案,會發現很多更剪短更效率更好的答案。寫部落格是激勵我自己能堅持下去,讓我的頭腦不去懈怠,望共勉。題目 write a script five dirs.sh that does these tasks make a dire...