getopt命令並不是bash的內建命令,它是由util-linux包提供的外部命令。
getopt 與 getopts 的區別
getopt 命令選項說明:
getopt 命令的選項說明:
-a 使getopt長選項支援"-"符號打頭,必須與-l同時使用
-l 後面接getopt支援長選項列表
-n program如果getopt處理引數返回錯誤,會指出是誰處理的這個錯誤,這個在呼叫多個指令碼時,很有用
-o 後面接短引數選項,這種用法與getopts類似,
-u 不給引數列表加引號,預設是加引號的(不使用-u選項),例如在加不引號的時候 --longopt "select * from db1.table1" $2只會取到select ,而不是完整的sql語句。
選項的使用定義規則類似 getopts :
例如ab:c::
意思是:
a 後沒有冒號,表示沒有可以引數
b 後跟乙個冒號,表示有乙個必要的引數
c 後跟兩個冒號,表示有乙個可選的引數(引數必須緊挨著選項)
長選項的定義相同,但用逗號分割。
示例:
#!/bin/bash
#定義選項, -o 表示短選項 -a 表示支援長選項的簡單模式(以 - 開頭) -l 表示長選項
# a 後沒有冒號,表示沒有引數
# b 後跟乙個冒號,表示有乙個必要引數
# c 後跟兩個冒號,表示有乙個可選引數(可選引數必須緊貼選項)
# -n 出錯時的資訊
# -- 也是乙個選項,比如 要建立乙個名字為 -f 的目錄,會使用 mkdir -- -f ,
# 在這裡用做表示最後乙個選項(用以判定 while 的結束)
# $@ 從命令列取出引數列表(不能用用 $* 代替,因為 $* 將所有的引數解釋成乙個字串
# 而 $@ 是乙個引數陣列)
# 判定 getopt 的執行時候有錯,錯誤資訊輸出到 stderr
if [ $? != 0 ]
then
echo "terminating....." >&2
exit 1
fi# 重新排列引數的順序
# 使用eval 的目的是為了防止引數中有shell命令,被錯誤的擴充套件。
eval set -- "$temp"
# 處理具體的選項
while true
do case "$1" in
echo "option a"
shift
;;-b | --banana | -banana)
echo "option b, argument $2"
shift 2
;;-c | --cherry | -cherry)
case "$2" in
"") # 選項 c 帶乙個可選引數,如果沒有指定就為空
echo "option c, no argument"
shift 2
;;*)
echo "option c, argument $2"
shift 2
esac
;;--)
shift
break
;;*)
echo "internal error!"
exit 1
;;esac
done
#顯示除選項外的引數(不包含選項的引數都會排到最後)
# arg 是 getopt 內建的變數 , 裡面的值,就是處理過之後的 $@(命令列傳入的引數)
for arg do
echo '--> '"$arg" ;
done
使用 getopt 處理命令行長引數
getopt命令並不是bash的內建命令,它是由util linux包提供的外部命令。getopt 與 getopts 的區別 getopts 是 shell 內建命令,getopt 是乙個獨立外部工具 getopt 命令選項說明 getopt 命令的選項說明 a 使getopt長選項支援 符號打頭...
Linux程式設計 用getopt處理命令列引數
函式宣告如下 include int getopt int argc,char const argv,const char optstrin g extern char optarg extern int optind,opterr,optopt 以下是一些主要的介紹。詳細的介紹參閱 該函式的arg...
使用getopt解析命令列引數
python中可以使用getopt來解析命令列引數,其定義如下 getopt args,shortopts,longopts 其中,getopt返回opts,args元組,opts是根據shortopts,longopts引數解析出來的 key,value 列表,而其他剩餘引數就會放到args列表中...