一、getopts 簡介
由於shell命令列的靈活性,自己編寫**判斷時,複雜度會比較高。使用內部命令 getopts 可以很方便地處理命令列引數。一般格式為:
getopts optstring name [args]
getopts 的設計目標是在迴圈中執行,每次執行迴圈,getopts 就檢查下乙個命令列引數,並判斷它是否合法。即檢查引數是否以 - 開頭,後面跟乙個包含在 options 中的字母。如果是,就把匹配的選項字母存在指定的變數 variable 中,並返回退出狀態0;如果 - 後面的字母沒有包含在 options 中,就在 variable 中存入乙個 ?,並返回退出狀態0;如果命令列中已經沒有引數,或者下乙個引數不以 - 開頭,就返回不為0的退出狀態。
getopts引用的三個環境變數:
optarg: 上乙個由getopts內建命令處理的選項引數的值, option argument(存放選項引數),當選項需要選項引數時,getopts 命令就將其置於變數 optarg 中
optind: 下乙個由getopts內建命令處理的引數的序號,option index,每次呼叫指令碼它都會被初始值為1,會逐次遞增。
opterr: 如果設為1,bash會顯示getopts的錯誤。設為0,不顯示getopts的錯誤。
getopts 的處理過程:
呼叫指令碼時,optind為初始化為1。每呼叫一次getopts,就將下乙個選項值賦給name , 選項索引值optind也會指向下乙個要處理選項的位置,選項引數則會賦給optarg
getopts 的設計目標是在迴圈中執行,每執行一次,getopts就檢查下乙個命令列引數,並判斷它是否有效。(即檢查引數是否以-開頭,後面跟乙個包含在opstring中的字母)。
有效,則把匹配的選項字母存在指定的變數variable中,並返回退出狀態0(ture);
無效(如果-後面的字母沒有包含在options),就在 variable 中存入乙個?,並返回退出狀態0;如果命令列中已經沒有引數,或者下乙個引數不以-開頭,就返回不為0的退出狀態(false, 可用於結束while 迴圈)。
getopts處理完所有引數後,會返回乙個非0值(false,退出迴圈),此時optind索引值指向第乙個非選項的引數[args],name置為?
getopts 錯誤處理
正確使用命令時,name用來儲存option, $optarg用來存放option的引數。若命令輸入有誤(選項無效,缺少引數),getopts會處理illegal option錯誤和miss option argument錯誤。處理結果與opstring是否以:開頭而不同。opstring 開頭的:用於遮蔽getopts處理時的錯誤訊息(指令碼中將opterr置於0也可以達到同樣的效果)。
[python@master tmp]$ more getopts.sh#!/bin/bash
while
getopts u:p:n option
docase
"$option"in
u)
echo
"option:u, value $optarg
"echo
"next arg index:$optind";;
p)echo
"option:p
"passwd=$optarg
echo
"next arg index:$optind
"echo
"passwd is: $passwd";;
n)echo
"option:n
"echo
"next arg index:$optind";;
\?)echo
"usage: args [-u] [-p] [-n]
"echo
"-u means uses
"echo
"-p means passwd
"echo
"-n means name
"exit 1;;
esac
done
執行:
[python@master tmp]$ sh getopts.sh -u root -p root_123 -n zhangweioption:u, value root
next arg index:
3option:p
next arg index:
5passwd is: root_123
option:n
next arg index:
6
注:1.getopts 允許把選項堆疊在一起(如 -ms)
2.如要帶引數,須在對應選項後加 :(如h後需加引數 h:ms)。此時選項和引數之間至少有乙個空白字元分隔,這樣的選項不能堆疊。
3.如果在需要引數的選項之後沒有找到引數,它就在給定的變數中存入?,並向標準錯誤中寫入錯誤訊息。否則將實際引數寫入特殊變數 :optarg
Python命令列引數解析模組getopt使用例項
這篇文章主要介紹了python命令列引數解析模組getopt使用例項,本文講解了使用語法格式 短選項引數例項 長選項引數例項等內容,需要的朋友可以參考下 格式 getopt args,options long options 1.args表示要解析的引數.2.options表示指令碼要識別的字元.字...
shell多引數處理技巧
mark下,以備後用shell程式設計,難免會碰到多引數,多引數處理技巧如下 while gt 0 do case 1 in h help print help exit 0 v version print version exit 0 l listen listening address 2 sh...
Shell中獲取引數
如果只需要傳入引數,基本上可以使用 n來取引數,注意n是從1開始的整數 0 指向的是指令碼的名字 cat myscript bin bash echo first arg 1 echo second arg 2 myscript hello world first arg hello second ...