天天看點

getopts和shift 的簡單應用

getopts的簡單應用:

腳本:

#!/bin/bash

while getopts ":a:b:c" SWITCH;do

case $SWITCH in

a) echo "choose -a"

echo $OPTARG

;;

b) echo "choose -b"

c) echo "choose -c"

\?) echo "unknown option"

esac

done

測試結果:

<a href="http://lyp0909.blog.51cto.com/attachment/201101/13/508999_1294907104IhVi.jpg"></a>

“:a:b:c”a前邊加“:” 表示忽略選項産生的錯誤輸出。a後面的“:”表示可以在選項-a 後面加上參數。OPTARG用來儲存參數的值。

shift的使用方法:shift指令是用來“截去(lops off)”;來自清單的位置參數,由左開始。一旦執行shift,$1的初始值會永遠消失,取而代之的是$2的舊值。$2的值變成$3的舊值,

以此類推。$#值則會逐次減1。shift也可使用一個可選的參數,也就是要位移的參數的計數。

——(《shell腳本程式設計指南》130頁)

舉例:#/bin/bash

echo $1

shift

<a href="http://lyp0909.blog.51cto.com/attachment/201101/13/508999_1294907105Ivue.jpg"></a>

下面,利用getopts指令和shift指令來建構一個簡單的腳本,腳本的作用是通過調用此腳本使我們在寫一個新的腳本時自動生成腳本的頭部,包括作者,時間,版本,注釋資訊等等。

示例:

while getopts ":a:d:" SWITCH;do

a) AUTHOR=$OPTARG

d) DESC=$OPTARG

\?) echo "sorry,unknown option!"

echo "Usage:$0 -a author -d description filename"

exit 1

shift $[$OPTIND-1]

if ! grep "#!/bin/bash" $1 &amp;&amp;gt;/dev/ull; then

cat&amp;gt;&amp;gt;$1&amp;lt;&amp;lt;EOF

#date &amp; time:`date +"%F %T"`

#Author:"${AUTHOR:=lily}" 如果不指明作者,預設是lily

#Description:$DESC

#Version:1.0

EOF

fi

vim +7 $1

wait

chmod u+x $1

建立一個腳本試試:./newscript.sh -a lucy -d "this is a test" d.sh

<a href="http://lyp0909.blog.51cto.com/attachment/201101/13/508999_1294907106zgmd.jpg"></a>

本文轉自 490999122 51CTO部落格,原文連結:http://blog.51cto.com/lyp0909/477887,如需轉載請自行聯系原作者