例子:在bash中,我怎樣才能以任意順序擁有一組參數?像鍵值對一樣?
./myscript --ip 192.168.1.1 --port 1985
或其他可能
./myscript --port 1985 --ip 192.168.1.1
我希望讓我的腳本拍攝一組參數,以任意順序
./myscript a b c d
./myscript d c b a
./myscript b d a c
Etcetera
例子:在bash中,我怎樣才能以任意順序擁有一組參數?像鍵值對一樣?
./myscript --ip 192.168.1.1 --port 1985
或其他可能
./myscript --port 1985 --ip 192.168.1.1
我希望讓我的腳本拍攝一組參數,以任意順序
./myscript a b c d
./myscript d c b a
./myscript b d a c
Etcetera
看看getopts
getopts的:getopts的optstring名稱[參數]
解析選項參數。Getopts被shell程序用來解析位置參數 作爲選項。
OPTSTRING
包含要識別的選項字母;如果一個字母 後跟一個冒號,則該選項預計會有一個參數 ,該參數應該用空格分隔。每次被調用時,getopts的將放置在 shell變量$名稱下一個選項,初始化名稱,如果不存在的話,和 下一個參數的索引被加工成殼 變量OPTIND。每次調用shell腳本時,OPTIND都會初始化爲1。當選項需要參數時, getopts將該參數放入shell變量
OPTARG
。getopts以兩種方式之一報告錯誤。如果OPTSTRING的第一個字符 是冒號,getopts將使用靜默錯誤報告。在 此模式下,不會打印錯誤消息。如果看到一個無效選項 ,getopts會將找到的選項字符放入OPTARG中。如果未找到 所需的參數,getopts會將':'放入NAME,並且 會將OPTARG設置爲找到的選項字符。如果getopts不在 靜默模式下,並且看到一個無效的選項,getopts會放置'?'到 NAME並取消OPTARG。如果找不到必需的參數,則'?' 被置於NAME中,OPTARG未被設置,並且打印出診斷消息 。
如果殼可變
OPTERR
的值爲0,getopts的禁止錯誤消息的 印刷,即使 OPTSTRING的第一個字符不是冒號。 OPTERR默認值爲1。Getopts通常會分析位置參數($ 0 - $ 9),但如果給出更多參數 ,則會分析它們。
退出狀態:
如果找到選項,返回成功;如果遇到選項結尾 或發生錯誤,則失敗。
您可以使用getopts
來解析命令行參數。 This tutorial對開始使用非常有用。
這個簡單的腳本需要端口號p
和IP地址i
參數。
while getopts "i:p:" option; do case $option in i) ip_address=$OPTARG echo "ip address: $ip_address" ;; p) port_number=$OPTARG echo "port number: $port_number" ;; esac done
可以以兩種方式執行:
./myscript -i 192.168.1.1 -p 1985
或
./myscript -p 1985 -i 192.168.1.1
執行時它打印:
ip address: 192.168.1.1 port number: 1985
也是截至http://wiki.bash-hackers.org/howto/getopts_tutorial
注意提到,getopts的是不能夠解析GNU風格的長選項(--myoption)或XF86風格的長選項(-myoption)
,所以你不能使用長字符串--port
或--ip
直接與getopts
。在這裏的鏈接中提供 但是另外的解決方法:
http://www.bahmanm.com/blogs/command-line-options-how-to-parse-in-bash-using-getopt
通常情況下,IP和端口的一個參數指定:'192.168.1.1:1985' – mouviciel
@mouviciel我會同意,但是這僅僅是用於演示目的 – stackoverflow