歡迎您光臨本站 註冊首頁

linux getopts學習筆記

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  

 

 

       獲取UNIX類型的選項:

  unix有一個優點就是標準UNIX命令在執行時都具有相同的命令行格式:

  command -options parameters

  如果在執行Shell程序也採用上述格式,Bourne Shell中提供了一條獲取和處理命令行選項的語句,即getopts語句。該語句的格式為:

  getopts option_string variable

  其中option_string中包含一個有效的單字元選項。若getopts命令在命令行中發現了連字元,那麼它將用連字元後面的字元同option_string相比較。若有匹配,則把變數variable的值設為該選項。若無匹配,則variable設為?。當getopts發現連字元後面沒有字元,會返回一個非零的狀態值。Shell程序中可以利用getopts的返回值建立一個循環。

  有時侯選項中還帶一個值,getopts命令同樣也支持這一功能。這時需要在option_string中選項字母后加一個冒號。當getopts命令發現冒號后,會從命令行該選項後讀取該值。若該值存在,那麼將被存在一個特殊的變數OPTARG中。如果該值不存在,getopts命令將在OPTARG中存放一個問號,並且在標準錯誤輸出上顯示一條消息。

  optstring  option字元串,會逐個匹配

  varname    每次匹配成功的選項

  arg        參數列表,沒寫時它會取命令行參數列表

  $OPTIND    特殊變數,option index,會逐個遞增, 初始值為1

  $OPTARG    特殊變數,option argument,不同情況下有不同的值

  細則1:當optstring以”:“開頭時,getopts會區分invalid option錯誤和miss option argument錯誤。

  invalid option時,varname會被設成?,$OPTARG是出問題的option;

  miss option argument時,varname會被設成:,$OPTARG是出問題的option。

  如果optstring不以”:“開頭,invalid option錯誤和miss option argument錯誤都會使

  varname被設成?,$OPTARG是出問題的option。

  細則2:當optstring中的字母跟”:“時,表明該option可接參數,參數(argument)放在$OPTARG中;

  如果缺參數,且optstring是以”:“開頭,則varname的值會是:,$OPTARG是該option,

  否則varname的值是?,$OPTARG是該option。(參照細則1)

  ---------------

  $ # 傳遞到腳本的參數個數

  $ * 以一個單字元串顯示所有向腳本傳遞的參數。與位置變數不同,此選項參數可超過9個

  $ $ 腳本運行的當前進程I D號

  $ ! 後台運行的最後一個進程的進程I D號

  $ @ 與$ #相同,但是使用時加引號,並在引號中返回每個參數

  $ - 顯示s h e l l使用的當前選項,與s e t命令功能相同

  $ ? 顯示最後命令的退出狀態。0表示沒有錯誤,其他任何值表明有錯誤。

  ------------

  shift 用於重新分配位置參數,其實就是把向參數左移動一個位置如:$1<--$2,$2<--$3老的$1將被刪 除掉。

  ------------

  範例:

  [root@localhost ~]# cat getopts2

  #!/bin/sh

  while getopts :ab: name

  do

  case $name in

  a)  aflag=1

  ;;

  b)  bflag=1

  bval=$OPTARG

  ;;

  \?) echo "USAGE:`basename $0` [-a] [-b value]"

  exit  1

  ;;

  esac

  done

  if [ ! -z $aflag ] ; then

  echo   "option -a specified"

  echo  "$aflag"

  echo "$OPTIND"

  fi

  if [ ! -z $bflag ] ; then

  echo   "option -b specified"

  echo  "$bflag"

  echo  "$bval"

  echo  "$OPTIND"

  fi

  echo "here  $OPTIND"

  shift $(($OPTIND -1))

  echo "$OPTIND"

  echo " `shift $(($OPTIND -1))`  "



[火星人 ] linux getopts學習筆記已經有335次圍觀

http://coctec.com/docs/program/show-post-71571.html