shell getopts命令
由于shell命令行的靈活性,自己編寫代碼判斷時(shí),復(fù)雜度會(huì)比較高。使用內(nèi)部命令 getopts 可以很方便地處理命令行參數(shù)。一般格式為:
getopts optstring name [args]
?????? getopts 的設(shè)計(jì)目標(biāo)是在循環(huán)中運(yùn)行,每次執(zhí)行循環(huán),getopts 就檢查下一個(gè)命令行參數(shù),并判斷它是否合法。即檢查參數(shù)是否以 - 開頭,后面跟一個(gè)包含在 options 中的字母。如果是,就把匹配的選項(xiàng)字母存在指定的變量 variable 中,并返回退出狀態(tài)0;如果 - 后面的字母沒有包含在 options 中,就在 variable 中存入一個(gè) ?,并返回退出狀態(tài)0;如果命令行中已經(jīng)沒有參數(shù),或者下一個(gè)參數(shù)不以 - 開頭,就返回不為0的退出狀態(tài)。
getopts引用的三個(gè)環(huán)境變量:
OPTARG: 上一個(gè)由getopts內(nèi)置命令處理的選項(xiàng)參數(shù)的值, option argument(存放選項(xiàng)參數(shù)),當(dāng)選項(xiàng)需要選項(xiàng)參數(shù)時(shí),getopts 命令就將其置于變量 OPTARG 中
OPTIND: ?下一個(gè)由getopts內(nèi)置命令處理的參數(shù)的序號(hào),option index,每次調(diào)用腳本它都會(huì)被初始值為1,會(huì)逐次遞增。
OPTERR: 如果設(shè)為1,bash會(huì)顯示getopts的錯(cuò)誤。設(shè)為0,不顯示getopts的錯(cuò)誤。
getopts 的處理過程:
調(diào)用腳本時(shí),OPTIND為初始化為1。每調(diào)用一次getopts,就將下一個(gè)選項(xiàng)值賦給name , 選項(xiàng)索引值OPTIND也會(huì)指向下一個(gè)要處理選項(xiàng)的位置,選項(xiàng)參數(shù)則會(huì)賦給OPTARG
getopts 的設(shè)計(jì)目標(biāo)是在循環(huán)中運(yùn)行,每執(zhí)行一次,getopts就檢查下一個(gè)命令行參數(shù),并判斷它是否有效。(即檢查參數(shù)是否以-開頭,后面跟一個(gè)包含在opstring中的字母)。
有效,則把匹配的選項(xiàng)字母存在指定的變量variable中,并返回退出狀態(tài)0(ture);
無(wú)效(如果-后面的字母沒有包含在options),就在 variable 中存入一個(gè)?,并返回退出狀態(tài)0;如果命令行中已經(jīng)沒有參數(shù),或者下一個(gè)參數(shù)不以-開頭,就返回不為0的退出狀態(tài)(false, 可用于結(jié)束while 循環(huán))。
getopts處理完所有參數(shù)后,會(huì)返回一個(gè)非0值(false,退出循環(huán)),此時(shí)OPTIND索引值指向第一個(gè)非選項(xiàng)的參數(shù)[args],name置為?
getopts 錯(cuò)誤處理
正確使用命令時(shí),name用來(lái)存儲(chǔ)option, $OPTARG用來(lái)存放option的參數(shù)。若命令輸入有誤(選項(xiàng)無(wú)效,缺少參數(shù)),getopts會(huì)處理illegal option錯(cuò)誤和miss option argument錯(cuò)誤。處理結(jié)果與opstring是否以:開頭而不同。opstring 開頭的:用于屏蔽getopts處理時(shí)的錯(cuò)誤消息(腳本中將OPTERR置于0也可以達(dá)到同樣的效果)。
?
舉個(gè)栗子
#!/bin/bash while getopts u:p:n option do case "$option" inu)echo "option:u, value $OPTARG"echo "next arg index:$OPTIND";;p)echo "option:p"passwd=$OPTARGecho "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
原文鏈接:https://www.cnblogs.com/hello-wei/p/9778407.html
轉(zhuǎn)載于:https://www.cnblogs.com/jianzhaojing/p/11451652.html
總結(jié)
以上是生活随笔為你收集整理的shell getopts命令的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 004_常用词汇句子翻译记录
- 下一篇: 嘟嘟嘟