国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Linux > 正文

Shell腳本中使用getopts處理多命令行選項(xiàng)

2019-10-26 18:59:17
字體:
供稿:網(wǎng)友

在Linux系統(tǒng)中,許多命令都提供了選項(xiàng),使用不同的選項(xiàng)就會(huì)得到不通的執(zhí)行結(jié)果

例如:ls命令,ls命令提供了多個(gè)選項(xiàng):-l、-a、-A、-h、-i等等,每個(gè)選項(xiàng)具有不同的功能,我們自己寫腳本時(shí)也可以定義選項(xiàng),提示用戶如何使用,本文介紹如何使用getopts命令來處理命令選項(xiàng)。

1.getopts命令的如何使用:

用getopts命令獲取到腳本選項(xiàng)后,getopts會(huì)將獲取到的選項(xiàng)所對(duì)應(yīng)的參數(shù)(選項(xiàng)對(duì)應(yīng)的參數(shù),并不是選項(xiàng)本身,有的命令選項(xiàng)后面是需要跟一個(gè)參數(shù)的,例如tcpdump 的-w選項(xiàng),后面需要指定一個(gè)文件來保存抓包數(shù)據(jù))自動(dòng)保存到OPTARG這個(gè)變量中。

getopts命令格式:getopts   OPTSTRING  VARNAME

OPTSTRING:告訴getopts會(huì)有哪些選項(xiàng)和參數(shù)(用選項(xiàng)后面加“:”來表示選項(xiàng)后面需要加參數(shù)) VARNAME:保存getopts獲取到的選項(xiàng)

示例:getopts  ahf:   var

告訴getopts查找-a、-h、-f選項(xiàng),其中f選項(xiàng)后面需要跟一個(gè)參數(shù),獲取到的選項(xiàng)都保存到變量var中

getopts命令支持兩種錯(cuò)誤報(bào)告模式,詳細(xì)錯(cuò)誤報(bào)告模式和抑制錯(cuò)誤報(bào)告模式。

在詳細(xì)錯(cuò)誤報(bào)告模式下:如果getopts檢測到一個(gè)無效的選項(xiàng),var的值會(huì)被設(shè)置為(?);如果getopts檢測到一個(gè)后面需要跟參數(shù)的選項(xiàng),后面沒有參數(shù),var的值也會(huì)被設(shè)置為(?)

在抑制錯(cuò)誤報(bào)告模式下:如果getopts檢測到一個(gè)無效的選項(xiàng),var的值會(huì)被設(shè)置為(?),變量OPTARG會(huì)被設(shè)置為這個(gè)無效的選項(xiàng);如果getopts檢測到一個(gè)后面需要跟參數(shù)的選項(xiàng),后面沒有參數(shù),var的值會(huì)被設(shè)置為(:),變量OPTARG會(huì)被設(shè)置為這個(gè)無效的選項(xiàng)

2.通過腳本來講解getopts如何獲取選項(xiàng),如何賦值給變量VARNAME和OPTSTRING:

示例:

#!/bin/bashstatus=off         #定義變量status,初始值設(shè)置為offfilename=""       #定義變量filename,用于保存選項(xiàng)參數(shù)(文件)output=""         #定義變量output,用于保存選項(xiàng)參數(shù)(目錄)Usage () {         #定義函數(shù)Usage,輸出腳本使用方法  echo "Usage"  echo "myscript [-h] [-v] [-f <filename>] [-o <filename>]"  exit -1}while getopts :hvf:o: varname  #告訴getopts此腳本有-h、-v、-f、-o四個(gè)選項(xiàng),-f和-o后面需要跟參數(shù)(沒有選項(xiàng)時(shí),getopts會(huì)設(shè)置一個(gè)退出狀態(tài)FALSE,退出循環(huán))do  case $varname in  h)   echo "$varname"   Usage   exit   ;;  v)   echo "$varname"   status=on   echo "$status"   exit   ;;  f)   echo "$varname"   echo "$OPTARG"   filename=$OPTARG          #將選項(xiàng)的參數(shù)賦值給filename   if [ ! -f $filename ];then        #判斷選項(xiàng)所跟的參數(shù)是否存在且是文件     echo "the source file $filename not exist!"     exit   fi   ;;  o)   echo "$varname"   echo "$OPTARG"   output=$OPTARG           #將選項(xiàng)參數(shù)賦值給output   if [ ! -d $output ];then        #判斷選項(xiàng)參數(shù)是否存在且是目錄     echo "the output path $output not exist"     exit   fi   ;;  :)                        #當(dāng)選項(xiàng)后面沒有參數(shù)時(shí),varname的值被設(shè)置為(:),OPTARG的值被設(shè)置為選項(xiàng)本身   echo "$varname"   echo "the option -$OPTARG require an arguement"    #提示用戶此選項(xiàng)后面需要一個(gè)參數(shù)   exit 1   ;;  ?)                  #當(dāng)選項(xiàng)不匹配時(shí),varname的值被設(shè)置為(?),OPTARG的值被設(shè)置為選項(xiàng)本身   echo "$varname"   echo "Invaild option: -$OPTARG"      #提示用戶此選項(xiàng)無效   Usage   exit 2   ;;  esacdone            
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 康马县| 耿马| 石阡县| 华宁县| 许昌市| 晴隆县| 合水县| 咸丰县| 乌拉特前旗| 平遥县| 大悟县| 枣庄市| 建始县| 射阳县| 桃园县| 拉萨市| 昌乐县| 新宾| 会泽县| 邵东县| 印江| 罗田县| 德江县| 溧阳市| 巴青县| 班玛县| 堆龙德庆县| 通河县| 确山县| 高要市| 海晏县| 宁南县| 洛南县| 巨野县| 大连市| 安龙县| 陇川县| 乌什县| 陕西省| 张掖市| 商都县|