主頁 > 知識庫 > Shell腳本中使用getopts處理多命令行選項

Shell腳本中使用getopts處理多命令行選項

熱門標簽:湖北孝感如何辦理 武漢語音電銷機器人加盟 同花順電話機器人微信 外呼系統(tǒng)的合法性 房產(chǎn)證地圖標注的兩個面積 地圖標注x是啥意思 輝縣市地圖標注 北京電銷機器人對市場的影響 威海電銷外呼系統(tǒng)好用嗎

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

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

1.getopts命令的如何使用:

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

getopts命令格式:getopts   OPTSTRING  VARNAME

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

示例:getopts  ahf:   var

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

getopts命令支持兩種錯誤報告模式,詳細錯誤報告模式和抑制錯誤報告模式。

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

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

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

示例:

#!/bin/bash
status=off         #定義變量status,初始值設(shè)置為off
filename=""       #定義變量filename,用于保存選項參數(shù)(文件)
output=""         #定義變量output,用于保存選項參數(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四個選項,-f和-o后面需要跟參數(shù)
(沒有選項時,getopts會設(shè)置一個退出狀態(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          #將選項的參數(shù)賦值給filename
   if [ ! -f $filename ];then        #判斷選項所跟的參數(shù)是否存在且是文件
     echo "the source file $filename not exist!"
     exit
   fi
   ;;
  o)
   echo "$varname"
   echo "$OPTARG"
   output=$OPTARG           #將選項參數(shù)賦值給output
   if [ ! -d $output ];then        #判斷選項參數(shù)是否存在且是目錄
     echo "the output path $output not exist"
     exit
   fi
   ;;
  :)                        #當選項后面沒有參數(shù)時,varname的值被設(shè)置為(:),OPTARG的值被設(shè)置為選項本身
   echo "$varname"
   echo "the option -$OPTARG require an arguement"    #提示用戶此選項后面需要一個參數(shù)
   exit 1
   ;;
  ?)                  #當選項不匹配時,varname的值被設(shè)置為(?),OPTARG的值被設(shè)置為選項本身
   echo "$varname"
   echo "Invaild option: -$OPTARG"      #提示用戶此選項無效
   Usage
   exit 2
   ;;
  esac
done

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

您可能感興趣的文章:
  • linux shell命令執(zhí)行順序的控制方法
  • Shell 命令執(zhí)行順序分析[圖]
  • Shell 管道及執(zhí)行順序分析
  • Shell腳本中多命令邏輯執(zhí)行順序的方法詳解

標簽:武威 西寧 麗江 蚌埠 紹興 日喀則 安康 迪慶

巨人網(wǎng)絡(luò)通訊聲明:本文標題《Shell腳本中使用getopts處理多命令行選項》,本文關(guān)鍵詞  Shell,腳本,中,使用,getopts,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Shell腳本中使用getopts處理多命令行選項》相關(guān)的同類信息!
  • 本頁收集關(guān)于Shell腳本中使用getopts處理多命令行選項的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章