十年專注于品牌網站建設 十余年專注于網站建設_小程序開發_APP開發,低調、敢創新、有情懷!
      南昌百恒網絡微信公眾號 掃一掃關注
      小程序
      tel-icon全國服務熱線:400-680-9298,0791-88117053
      掃一掃關注百恒網絡微信公眾號
      掃一掃打開百恒網絡微信小程序

      百恒網絡

      南昌百恒網絡

      linux中如何使用getopt命令?

      百恒網絡 2017-09-15 7429

      getopt命令是一個在處理命令行選項和參數時非常方便的工具。它能夠識別命令行參數,從而在腳本中解析它們時更方便。

      1、命令的格式

      getopt命令可以接受一系列任意形式的命令行選項和參數,并自動將它們轉換成適當的格式。它的命令格式如下:

      getopt optstring parameters

      optstring是這個過程的關鍵所在。它定義了命令行有效的選項字母,還定義了哪些選項字母需要參數值。 首先,在optstring中列出你要在腳本中用到的每個命令行選項字母。然后,在每個需要參數值的選項字母后加一個冒號。getopt命令會基于你定義的optstring解析提供的參數。

      下面南昌網絡公司-百恒網絡為大家舉一個getopt工作的簡單例子,讓大家可以更好的了解它。

      $ getopt ab:cd -a -b test1 -cd test2 test3

      -a -b test1 -c -d -- test2 test3

      $

      optstring定義了四個有效選項字母:a、b、c和d。冒號(:)被放在了字母b后面,因為b選項需要一個參數值。當getopt命令運行時,它會檢查提供的參數列表(-a -b test1 -cd test2 test3),并基于提供的optstring進行解析。注意,它會自動將-cd選項分成兩個單獨的選項,并插入雙破折線來分隔行中的額外參數。

      如果指定了一個不在optstring中的選項,默認情況下,getopt命令會產生一條錯誤消息。

      $ getopt ab:cd -a -b test1 -cde test2 test3

      getopt: invalid option -- e

      -a -b test1 -c -d -- test2 test3

      $

      如果想忽略這條錯誤消息,可以在命令后加-q選項。

      $ getopt -q ab:cd -a -b test1 -cde test2 test3

      -a -b 'test1' -c -d -- 'test2' 'test3'

      $

      注意,getopt命令選項必須出現在optstring之前。現在應該可以在腳本中使用此命令處理命令行選項了。

      2、在腳本中使用getopt

      可以在腳本中使用getopt來格式化腳本所攜帶的任何命令行選項或參數,但用起來略微復雜。那么具體如何操作呢?下面南昌網絡公司就來和大家探討一下:

      方法是用getopt命令生成的格式化后的版本來替換已有的命令行選項和參數。用set命令能夠做到。

      set命令的選項之一是雙破折線(--),它會將命令行參數替換成set命令的命令行值。

      然后,該方法會將原始腳本的命令行參數傳給getopt命令,之后再將getopt命令的輸出傳 給set命令,用getopt格式化后的命令行參數來替換原始的命令行參數,看起來如下所示。

      set -- $(getopt -q ab:cd "$@")

      現在原始的命令行參數變量的值會被getopt命令的輸出替換,而getopt已經為我們格式化好了命令行參數。

      利用該方法,現在就可以寫出能幫我們處理命令行參數的腳本。

      $ cat test18.sh

      #!/bin/bash

      # Extract command line options & values with getopt

      #

      set -- $(getopt -q ab:cd "$@")

      #

      echo

      while [ -n "$1" ]

      do

      case "$1" in

      -a) echo "Found the -a option" ;;

      -b) param="$2"

      echo "Found the -b option, with parameter value $param"

      shift ;;

      -c) echo "Found the -c option" ;;

      --) shift

      break ;;

      *) echo "$1 is not an option";;

      esac

      shift

      done

      #

      count=1 for param in "$@"

      do

      echo "Parameter #$count: $param"

      count=$[ $count + 1 ] done

      #

      $

      你會注意到它跟腳本test17.sh一樣,唯一不同的是加入了getopt命令來幫助格式化命令行參數。

      現在如果運行帶有復雜選項的腳本,就可以看出效果更好了。

      $ ./test18.sh -ac

      Found the -a option

      Found the -c option

      $

      當然,之前的功能照樣沒有問題。

      $ ./test18.sh -a -b test1 -cd test2 test3 test4

      Found the -a option

      Found the -b option, with parameter value 'test1'

      Found the -c option

      Parameter #1: 'test2'

      Parameter #2: 'test3'

      Parameter #3: 'test4'

      $

      現在看起來相當不錯了。但是,在getopt命令中仍然隱藏著一個小問題。看看這個例子。

      $ ./test18.sh -a -b test1 -cd "test2 test3" test4

      Found the -a option

      Found the -b option, with parameter value 'test1'

      Found the -c option

      Parameter #1: 'test2

      Parameter #2: test3'

      Parameter #3: 'test4'

      $

      getopt命令并不擅長處理帶空格和引號的參數值。它會將空格當作參數分隔符,而不是根據雙引號將二者當作一個參數。幸好還有另外一個辦法能解決這個問題。

      以上便是南昌網絡公司-百恒網絡為大家介紹的關于linux中getopt命令的使用方法,希望能夠對大家有所幫助。此外,本公司專業從事網站建設、微信開發、APP開發等服務,如有需要,歡迎大家來電咨詢,洽談合作!


      400-680-9298,0791-88117053
      掃一掃關注百恒網絡微信公眾號
      掃一掃打開百恒網絡小程序

      歡迎您的光顧,我們將竭誠為您服務×

      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售后服務 售后服務
       
      售后服務 售后服務
       
      備案專線 備案專線
       
      ×
      久久丫精品国产亚洲av不卡| 惠民福利中文字幕人妻无码乱精品 | 最新 国产 精品 精品 视频| 国产在线精品一区二区不卡麻豆| 无码日韩人妻av一区免费| 无码日韩精品一区二区三区免费 | 中文字幕精品无码久久久久久3D日动漫| 日韩毛片人妻久久蜜桃传媒| 国产亚洲蜜芽精品久久| 日韩精品专区在线影院重磅 | 日韩国产精品视频| 国产亚洲精品美女久久久久久下载 | 久热爱精品视频在线| 国产精品免费观看| 亚洲国产福利精品一区二区| 久久精品国产亚洲AV无码娇色| 无码精品一区二区三区免费视频| 亚洲av午夜福利精品一区人妖 | 国产精品成人va在线观看入口 | 日韩一区二区三区射精| 国产精品视频1区| 日韩在线视精品在亚洲| 日韩成人国产精品视频| 国产精品李雅在线观看| 国产精品高清久久久久久久| 午夜精品福利在线观看| 婷婷99视频精品全部在线观看 | 久久99精品国产麻豆蜜芽| 国产精品无码不卡一区二区三区| 亚洲午夜精品久久久久久浪潮 | 亚洲精品视频久久| 久久99国产综合精品免费| 99久久精品国产亚洲| 99国产精品视频免费观看| 精品少妇无码AV无码专区| 91精品国产综合久久香蕉| 久久6这里只有精品| 92国产精品午夜福利| 久久精品无码一区二区三区不卡 | 久9热免费精品视频在线观看| 国产A三级久久精品|