日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux getopts学习笔记

發布時間:2024/4/17 linux 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux getopts学习笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://www.linuxeden.com/html/develop/20100630/103593.html

?????? 獲取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))`? "

?

?

http://www.chinaitpower.com/2005September/2005-09-13/204604.html

getopts option_string variable???
具體使用方法請參考getopts的在線文檔(man getopts).

使用getopts命令讀取unix格式選項
??? UNIX格式選項指如下格式的命令行參數:
??? command -options parameters
?
??? 使用格式:
??? getopts option_string variable
?
??? 具體使用方法請參考getopts的在線文檔(man getopts).
?
??? 示例如下:
?
???????? #newdate
???????? if [ $# -lt 1 ]
???????? then
???????????? date
???????? else
??????????? while getopts mdyDHMSTjJwahr OPTION
??????????? do
?????????????? case $OPTION
?????????????? in
????????????????? m) date '+%m ';;? # Month of Year
????????????????? d) date '+%d ';;? # Day of Month
????????????????? y) date '+%y ';;? # Year
????????????????? D) date '+%D ';;? # MM/DD/YY
????????????????? H) date '+%H ';;? # Hour
????????????????? M) date '+%M ';;? # Minute
????????????????? S) date '+%S ';;? # Second
????????????????? T) date '+%T ';;? # HH:MM:SS
????????????????? j) date '+%j ';;? # day of year
????????????????? J) date '+%y%j ';;# 5 digit Julian date
????????????????? w) date '+%w ';;? # Day of the Week
????????????????? a) date '+%a ';;? # Day abbreviation
????????????????? h) date '+%h ';;? # Month abbreviation
????????????????? r) date '+%r ';;? # AM-PM time
????????????????? \?) echo "Invalid option $OPTION";;
?????????????? esac
??????????? done
???????? fi
?
???????? $ newdate -J
???????? 94031
???????? $ newdate -a -h -d
???????? Mon
???????? Jan
???????? 31
???????? $ newdate -ahd
???????? Mon
???????? Jan
???????? 31
???????? $
?
?
???????? 示例程序:復制程序
?
???????? # Syntax: duplicate [-c integer] [-v] filename
???????? #??? where integer is the number of duplicate copies
???????? #??? and -v is the verbose option
?
???????? COPIES=1
???????? VERBOSE=N
?
?
???????? while getopts vc: OPTION
???????? do
??????????? case $OPTION
??????????? in
?????????????? c) COPIES=$OPTARG;;
?????????????? v) VERBOSE=Y;;
?????????????? \?) echo "Illegal Option"
?????????????????? exit 1;;
??????????? esac
???????? done
?
???????? if [ $OPTIND -gt $# ]
???????? then
??????????? echo "No file name specified"
??????????? exit 2
???????? fi
?
?
???????? shift `expr $OPTIND -1`
?
???????? FILE=
???????? COPY=0
?
???????? while [ $COPIES -gt $COPY ]
???????? do
??????????? COPY=`expr $COPY + 1`
??????????? cp $FILE $$
??????????? if [ VERBOSE = Y ]
??????????? then
?????????????? echo $$
??????????? fi
???????? done
?
?
???????? $ duplicate -v fileA
???????? fileA1
???????? $ duplicate -c 3 -v fileB
???????? fileB1
???????? fileB2
???????? fileB3?

?

總結

以上是生活随笔為你收集整理的linux getopts学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。