By francis_hao Jul 5,2017
getopts是shell的一個內置命令。
概述
getopts optstring name [args]
OPTIND,OPTARG,OPTERR
描述
getopts被shell程序用來分析位置參數,optstring包含需要被識別的選項字符,如果這里的字符后面跟着一個冒號,表明該字符選項需要一個參數,其參數需要以空格分隔。冒號和問號不能被用作選項字符。getopts每次被調用時,它會將下一個選項字符放置到變量name中。
變量OPTIND是下一個要被處理的位置參數的索引,初始值為1。shell不會自動的復位OPTIND,如果想再次對位置參數進行分析,則需要手動對OPTIND進行復位。當選項需要參數時,getopts將參數放置在變量OPTARG中。
當所有的位置參數分析結束,getopts退出並返回一個大於0的值,OPTIND變為首個不是選項的位置參數的索引,name被置為'?'。默認情況下getopts會去分析傳入的位置參數,但如果args有值,則只會分析args里的參數,args只支持形如-abc形式。
如果遇到錯誤,getopts會打印出錯誤信息,但如果optstring第一個字符是冒號,或者變量OPTERR被置為0(此項只是不打印錯誤信息,不會在出錯后設置OPTARG的值),則會進入靜默模式,不會打印錯誤信息。遇到的錯誤通常有兩種情況:
1、無效的選項,此時name會被置為'?'。靜默模式下,會將此無效選項置於OPTARG。非靜默模式,打印錯誤信息,並且unset OPTARG。
2、選項需要的參數未提供,靜默模式下,name會被置為':',無效選項會置於OPTARG。非靜默模式,name被置為'?',unset OPTARG並打印出錯信息。
getopts如果遇到一個選項(無論是否有效),返回true(0)。如果遇到結束或者產生錯誤,返回false
示例
示例來自參考【2】
#!/bin/sh |
一個運行實例
其中,-a和-b是正確的選項,-p和-c分別對應錯誤選項的兩種情況。
本文由 劉英皓 創作,采用 知識共享 署名-非商業性使用-相同方式共享 3.0 中國大陸 許可協議進行許可。歡迎轉載,請注明出處:
轉載自:http://www.cnblogs.com/yinghao1991/p/7123550.html
參考
【1】man bash
【2】D.坦思.linux與unix shell編程指南.機械工業出版社.2000-1