使用 getopt 處理命令行長引數

2022-06-17 19:24:12 字數 2388 閱讀 8418

getopt命令並不是bash的內建命令,它是由util-linux包提供的外部命令。

getopt 與 getopts 的區別

getopts 是 shell 內建命令, getopt 是乙個獨立外部工具

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命令與getopts命令不同,它實際上是通過將引數規範化來幫助我們處理的。具體的用法,如下面的指令碼:

#!/bin/bash

#echo $@

#-o或--options選項後面接可接受的短選項,如ab:c::,表示可接受的短選項為-a -b -c,其中-a選項不接引數,-b選項後必須接引數,-c選項的引數為可選的

#-l或--long選項後面接可接受的長選項,用逗號分開,冒號的意義同短選項。

#-n選項後接選項解析錯誤時提示的指令碼名字

args=`getopt -o ab:c:: --long along,blong:,clong:: -n 'example.sh' -- "$@"`

if [ $? != 0 ]; then

echo "terminating..."

exit 1

fi#echo $args

#將規範化後的命令列引數分配至位置引數($1,$2,...)

eval set -- "$"

while true

docase "$1" in

-a|--along)

echo "option a";

shift

;;-b|--blong)

echo "option b, argument $2";

shift 2

;;-c|--clong)

case "$2" in

"")echo "option c, no argument";

shift 2

;;*)

echo "option c, argument $2";

shift 2;

;;esac

;;--)

shift

break

;;*)

echo "internal error!"

exit 1

;;esac

done

#處理剩餘的引數

for arg in $@

doecho "processing $arg"

done

需要注意的是,像上面的-c選項,後面是可接可不接引數的,如果需要傳遞引數給-c選項,則必須使用如下的方式:

#./getopt.sh -b 123 -a -c456 file1 file2 

option b, argument 123

option a

option c, argument 456

processing file1

processing file2

使用 getopt 處理命令行長引數(長選項)

getopt命令並不是bash的內建命令,它是由util linux包提供的外部命令。getopt 與 getopts 的區別 getopt 命令選項說明 getopt 命令的選項說明 a 使getopt長選項支援 符號打頭,必須與 l同時使用 l 後面接getopt支援長選項列表 n progra...

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列表中...