shell中處理引數getopts命令

2022-04-01 19:00:16 字數 2529 閱讀 4751

一、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 zhangwei

option: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 ...