shell里的getopts


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
while getopts :ab:c: OPTION;do
    case $OPTION in
    a)echo "get option a"
    ;;
    b)echo "get option b and parameter is $OPTARG"
    ;;
    c)echo "get option c and parameter is $OPTARG"
    ;;
    ?)echo "get a non option $OPTARG and OPTION is $OPTION"
    ;;
    esac
done

 

 

一個運行實例

其中,-a和-b是正確的選項,-p和-c分別對應錯誤選項的兩種情況。

 

 


本文由 劉英皓 創作,采用 知識共享 署名-非商業性使用-相同方式共享 3.0 中國大陸 許可協議進行許可。歡迎轉載,請注明出處:
轉載自:http://www.cnblogs.com/yinghao1991/p/7123550.html

 

 

參考

【1】man bash

【2】D.坦思.linux與unix shell編程指南.機械工業出版社.2000-1


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM