第4章 处理用户输入与显示数据------------(更高级的getopts命令、标准化选项)

来源:互联网 发布:网络剧《余罪》傅国生 编辑:程序博客网 时间:2024/06/13 05:40

4.2.4 更高级的getopts命令

         getopt为在命令行中找到的所有待处理选项和参数生成一个输出,而与getopt不同,getopts命令顺序的对现有的shell参数变量进行处理。

         每调用一次getopts,它只处理在命令中监测到的参数中的一个。处理完所有测试后,以大于零的退出状态退出。因此,getopts非常适宜用在循环中解析所有命令行参数。getopts命令的格式为:getopts optstring variable。其中optstring值与getopt命令中使用的相似。在选项字符串中列出有效选项字母,如果选项字母需要参数值后面加一个冒号。如果要禁止输出错误消息,那么使选项字符串以冒号开头。getopts命令将当前参数放在命令行中定义的variable中。

         getopts命令使用两个环境变量。环境变量OPTARG中包含需要参数值的选项要使用的值。环境变量OPTIND包含的值表示getopts停止处理时在参数列表中的位置。这样,处理完选项后可以继续处理其他命令行参数。

         当getopts命令解析命令行选项时,会将打头的破折号去掉,所以在case定义中不需要破折号。getopts命令具有许多很好的特性。首先,在参数值中可以包含空格;另一个是选项字母和参数值中间可以没有空格;还有一个好特性是将在命令行中找到的未定义的选项都绑定为单一的输出----问号,任何在选项字符串值中未定义的选项字母都将以问号形式传递给代码。          

 #!/bin/bash#使用getopts与OPTARG组合while getopts :ab:cd: optdo  case $opt in     a)echo "Found -a option";;     b)echo "Found -b option,with value $OPTARG";;     c)echo "Found -c option";;     d)echo "Found -d option,with value $OPTARG";;     *)echo "Unknow options:$opt"  esacdone

         getopts命令知道何时停止处理选项,将参数留给用户处理。getopts每个处理选项,环境变量OPTIND的值会增加1。当到达getopts处理的末尾时,可以使用shift命令和OPTIND值进行操作来移动到参数。         

#!/bin/bash#使用getopts与OPTARG组合while getopts :ab:cd: optdo  case $opt in     a)echo "Found -a option";;     b)echo "Found -b option,with value $OPTARG";;     c)echo "Found -c option";;     d)echo "Found -d option,with value $OPTARG";;     *)echo "Unknow options:$opt"  esacdoneecho "选项个数:$OPTIND"echo "选项个数:$[ $OPTIND-1 ]"#命令行参数左移$[ $OPTIND-1 ]位shift $[ $OPTIND-1 ]count=1for par in $@do   echo "Parameter #$count=$par"   count=$[ $count + 1 ]done

4.2.4 标准化选项

         创建脚本时,用户拥有对shell脚本的控制权。完全由用户决定选择使用哪些字母选项,以及如何使用它们。但是,在Linux世界中有一些字母选项具有某种标准含义。如果在shell脚本中使用这些选项,会使脚本变得更加便于使用。下图给出Linux中使用的一些命令行选项的常用含义:

         

0 0
原创粉丝点击