当前所在位置:珠峰网资料 >> 计算机 >> 计算机等级考试 >> 正文
linuxgetopts学习笔记
发布时间:2010/7/1 10:59:08 来源:城市学习网 编辑:ziteng
  获取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) [NextPage]  ---------------
  $ # 传递到脚本的参数个数
  $ * 以一个单字符串显示所有向脚本传递的参数。与位置变量不同,此选项参数可超过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
  [NextPage]   \?) 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))`
广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved