source:
getopts optstring varname [arg ...]
optstringoption字串,會逐個匹配
varname每次匹配成功的選項
arg引數列表,沒寫時它會取命令列引數列表
$optind特殊變數,option index,會逐個遞增
$optarg特殊變數,option argument,不同情況下有不同的值
細則1:當optstring以」:「開頭時,getopts會區分invalid option錯誤和miss option argument錯誤。
invalid option時,varname會被設成?,$optarg是出問題的option;
miss option argument時,varname會被設成:,$optarg是出問題的option。
如果optstring不以」:「開頭,invalid option錯誤和miss option argument錯誤都會使
varname被設成?,$optarg是出問題的option。
細則2:當optstring中的字母跟」:「時,表明該option可接引數,引數(argument)放在$optarg中;
如果缺引數,且optstring是以」:「開頭,則varname的值會是:,$optarg是該option,
否則varname的值是?,$optarg是該option。(參照細則1)
簡單的sample:
#!/bin/bash
skipblanks
=
tmpdir
=
/tmp
case
=lower
while getopts :bt:u arg
docase $
arg in
b)skipblanks
=
true
echo "if skip blanks? $skipblanks";;
t)if
[-d "$optarg"
]then
tmpdir
=
$optarg
echo "temp dir is $tmpdir."
else
echo "$0: $optarg is not a directory."
>
&2exit 1fi;
;u)case
=upper
echo "case sensitivity is $case.";;
:) echo "$0: must supply an argument to -$optarg."
>
&2exit 1;;
\?) echo "invalid option -$optarg ignored."
>&2;
;esac
done
source:
while getopts ":abcde:fg" option
# initial declaration.
# 開始的宣告.
# a, b, c, d, e, f, 和 g 被認為是選項(標誌).
# e 選項後邊的:提示,這個選項帶乙個引數.
docase $option in
a ) # do something with variable 'a'.
echo aaa
;;b ) #
echo bbb
;;e) # do something with 'e', and also with $optarg,
echo eee with $optarg
;;g ) # 對選項'g'作些操作.
echo ggg
;;esac
done
shift$(($optind - 1))
# 將引數指標向下移動.
複製**
注釋掉shift
$(($optind - 1))程式也照常執行,那這個有什麼用呢?
由於 $optind 總是儲存原始$*中下乙個要處理的元素位置,程式執行到這句話的時候,指標後面的引數還都是沒有處理過的,而指標前的引數已經全部處理過了。
通過shift $(($optind - 1)) 的處理,$*中就只保留了除去選項內容的引數(未處理過的引數),可以在其後進行正常的shell程式設計處理了。
下面是在網上搜到的例子:
echo $*
while getopts ":a:bc" opt
docase $opt in
a ) echo $optarg
echo $optind;;
b ) echo "b $optind";;
c ) echo "c $optind";;
? ) echo "error"
exit 1;;
esac
done
echo $optind
shift $(($optind - 1))
echo $0
echo $*
執行結果:
#./test -a 12 -bc 34
-a 12 -bc 34123
b 3c 4
4./test34
Bash 裡的轉義序列
在 bash 裡,一共有五個地方支援反斜槓開頭的轉義序列,包括兩個內部命令 echo 和 printf 的引數裡,字串語法 裡,還有四個提示符變數 ps1 ps4 裡,以及在 readline 配置檔案裡 用來自定義鍵盤快捷鍵 其中後兩者不在本文的討論範圍內,我們只看看前三個命令 語法在對某些轉義序...
getopts的用法解讀
getopts 命令 用途 處理命令列引數,並校驗有效選項。語法 getopts 選項字串 名稱 引數 getopts 命令是 korn posix shell 的內建命令,用來從引數列表檢索選項以及選項引數。選項由乙個 加號 或者是由乙個 減號 後跟乙個字元開始。乙個既不是以 也不是以 開始的選項...
shell中getopts的用法
命令格式 getopts string args var name 兩個引數 如果不是很理解,先記住其命令格式和它的兩個引數代表的意義,看下面的操作。file name test bin bash while getopts a opt docase in a echo this is a vaul...