十年專注于品牌網(wǎng)站建設(shè) 十余年專注于網(wǎng)站建設(shè)_小程序開發(fā)_APP開發(fā),低調(diào)、敢創(chuàng)新、有情懷!
      南昌百恒網(wǎng)絡(luò)微信公眾號 掃一掃關(guān)注
      小程序
      tel-icon全國服務(wù)熱線:400-680-9298,0791-88117053
      掃一掃關(guān)注百恒網(wǎng)絡(luò)微信公眾號
      掃一掃打開百恒網(wǎng)絡(luò)微信小程序

      百恒網(wǎng)絡(luò)

      南昌百恒網(wǎng)絡(luò)

      linux中如何使用getopt命令?

      百恒網(wǎng)絡(luò) 2017-09-15 7533

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

      1、命令的格式

      getopt命令可以接受一系列任意形式的命令行選項和參數(shù),并自動將它們轉(zhuǎn)換成適當(dāng)?shù)母袷?。它的命令格式如下?

      getopt optstring parameters

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

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

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

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

      $

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

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

      $ 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命令選項必須出現(xiàn)在optstring之前。現(xiàn)在應(yīng)該可以在腳本中使用此命令處理命令行選項了。

      2、在腳本中使用getopt

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

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

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

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

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

      現(xiàn)在原始的命令行參數(shù)變量的值會被getopt命令的輸出替換,而getopt已經(jīng)為我們格式化好了命令行參數(shù)。

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

      $ 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命令來幫助格式化命令行參數(shù)。

      現(xiàn)在如果運行帶有復(fù)雜選項的腳本,就可以看出效果更好了。

      $ ./test18.sh -ac

      Found the -a option

      Found the -c option

      $

      當(dāng)然,之前的功能照樣沒有問題。

      $ ./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'

      $

      現(xiàn)在看起來相當(dāng)不錯了。但是,在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命令并不擅長處理帶空格和引號的參數(shù)值。它會將空格當(dāng)作參數(shù)分隔符,而不是根據(jù)雙引號將二者當(dāng)作一個參數(shù)。幸好還有另外一個辦法能解決這個問題。

      以上便是南昌網(wǎng)絡(luò)公司-百恒網(wǎng)絡(luò)為大家介紹的關(guān)于linux中g(shù)etopt命令的使用方法,希望能夠?qū)Υ蠹矣兴鶐椭?。此外,本公司專業(yè)從事網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)等服務(wù),如有需要,歡迎大家來電咨詢,洽談合作!


      400-680-9298,0791-88117053
      掃一掃關(guān)注百恒網(wǎng)絡(luò)微信公眾號
      掃一掃打開百恒網(wǎng)絡(luò)小程序

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

      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售后服務(wù) 售后服務(wù)
       
      售后服務(wù) 售后服務(wù)
       
      備案專線 備案專線
       
      ×
      热RE99久久精品国产66热| 一本久久a久久精品综合夜夜| 日韩人妻一区二区三区蜜桃视频| 国产欧美一区二区精品仙草咪| 亚洲精品欧洲精品| 热re99久久精品国99热| 国产精品99精品久久免费| 国产亚洲精品免费视频播放| 国产国拍亚洲精品福利| 人成精品视频三区二区一区| 国产亚洲欧美日韩亚洲中文色| 视频一区视频二区日韩专区| 国产精品久久久久久福利| 国产精品夜夜春夜夜爽久久小| 99久久国产亚洲综合精品| 国产精品久久久久久福利漫画 | 精品无码国产污污污免费网站国产 | 在线亚洲精品视频| 老司机无码精品A| 亚洲а∨精品天堂在线| 国内精品伊人久久久久妇| 99久久er这里只有精品18| 2021国产精品久久精品| 2021国产精品久久精品| 国产精品1024| 亚洲精品色播一区二区| 蜜臀AV无码精品人妻色欲 | 99久久精品毛片免费播放| 成人精品视频一区二区三区| 久久无码精品一区二区三区| 国产亚洲精品a在线观看| 国内精品国产成人国产三级| CHINESE中国精品自拍| 欧洲熟妇精品视频| 国产一区二区三区久久精品| 国产精品国产三级国产AV主播 | 色欲AV永久无码精品无码| 人妻少妇精品无码专区动漫 | 国产精品成人99久久久久91gav| 国产精品小视频免费无限app| 久久www免费人成精品香蕉|