Chinaunix首页 | 论坛 | 博客
  • 博客访问: 783422
  • 博文数量: 108
  • 博客积分: 2887
  • 博客等级: 少校
  • 技术积分: 1570
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-28 07:51
文章分类

全部博文(108)

文章存档

2012年(4)

2011年(86)

2010年(18)

分类: Python/Ruby

2011-04-03 21:15:31

getopt
分析传递到脚本命令行的最前有力的工具,该命令与getopt外部命令和C语言中的getopt的作用是相同的,能
分配多个参数草脚本中。


使用两个隐含的变量,$OPTIND(OPTion INDex)即参数指针和选项索引 ,$OPTARG(OPTion ARGument)选项
参数,


在声明标签中,选项名后面的冒号用来提示这个选项名已经分配了一个参数。

使用注意事项:
通过命令行传递到脚本中的参数前边必须加上一个dash(-)符号,只有这样,getopt才会认为这个参数是一个选项

getopt命令不处理不带dash符号的参数。
 

#!/bin/bash
#ex33.sh:Exercising getopts and OPTIND
#        
#Here wo  observe how 'getopt' processes command-line arguments to script.
#The argument are parsed as "options"(flags) and associated arguments.

#Try invoking this scripts with:
#    'scriptname -mn'
#    'scriptname -oq qOption'(qOption canbe some arbitrary string.)
#    'scriptname -qXXX -r'
#    
#    'scriptname -qr'
#+        -Unexpected result,takes "r" as the argument to option "q"
#    'scriptname -q -r'
#+        -Unexpected result,same as above
#    'scriptname -mnop -mnop'    -Unexpect result
#    (OPTIND is unreliable at stating where an option come from.)
#
#    If an option expects an argument ("flag:"),then it will grab
#+    whatever is next on the command-line.

NO_ARGS=0
E_OPTERROR=65

if [ $# -eq "$NO_ARGS" ]        #script invoked with no command-line args?
then
  echo "Usage:`basename $0` options (-mnopqrs)"
  exit $E_OPTERROR        #Exit and explain usage.
                          #Usage:scriptname -options
                          #Note:dash (-) necessary
fi


while getopts ":mnopq:rs" Option
do
  case $Option in
  m    ) echo "Scenario #1:option -m- [OPTIND=${OPTIND}]"
  ;;
  n|o    ) echo "Scenario #2:option -$Option- [optind=${OPTIND}]"
  ;;
  p    ) echo "Scenario #3: option -p- [OPTIND=${OPTIND}]"
  ;;
  q    ) echo "Scenario #4: option -q-with argument \"$OPTIND\" [OPTIND=${OPTIND}]"
  ;;
#    Note that option 'q' must have an associated argument,
#+    otherwise it falls through to the default.
  r|s    ) echo "Scenario #5: option -$Option- [OPTIND=${OPTIND}]"
  ;;
  *    ) echo "Unimplemented option chosen."        #Default.
  ;;
 esac
done

shift $(($OPTIND-1))
#Decrements the argument pointer soit points to  next argument.
#$1 now references the first non-option item supplied on the command-line
#+if one exists.

exit $?

#The getopts mechanism allow one to specify: scriptname -mnop -mnop
#+but there is no reliable way to differentiate what came from where
#+by using OPTIND."

阅读(7715) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~