• shell里的getopts


    By francis_hao    Jul 5,2017

     

    getopts是shell的一个内置命令。

    概述

    getopts optstring name [args]
    OPTIND,OPTARG,OPTERR

     

    描述

    getopts被shell程序用来分析位置参数,optstring包含需要被识别的选项字符,如果这里的字符后面跟着一个冒号,表明该字符选项需要一个参数,其参数需要以空格分隔。冒号和问号不能被用作选项字符。getopts每次被调用时,它会将下一个选项字符放置到变量name中。

    变量OPTIND是下一个要被处理的位置参数的索引,初始值为1。shell不会自动的复位OPTIND,如果想再次对位置参数进行分析,则需要手动对OPTIND进行复位。当选项需要参数时,getopts将参数放置在变量OPTARG中。

    当所有的位置参数分析结束,getopts退出并返回一个大于0的值,OPTIND变为首个不是选项的位置参数的索引,name被置为'?'。默认情况下getopts会去分析传入的位置参数,但如果args有值,则只会分析args里的参数,args只支持形如-abc形式。

    如果遇到错误,getopts会打印出错误信息,但如果optstring第一个字符是冒号,或者变量OPTERR被置为0(此项只是不打印错误信息,不会在出错后设置OPTARG的值),则会进入静默模式,不会打印错误信息。遇到的错误通常有两种情况:
    1、无效的选项,此时name会被置为'?'。静默模式下,会将此无效选项置于OPTARG。非静默模式,打印错误信息,并且unset OPTARG。
    2、选项需要的参数未提供,静默模式下,name会被置为':',无效选项会置于OPTARG。非静默模式,name被置为'?',unset OPTARG并打印出错信息。

    getopts如果遇到一个选项(无论是否有效),返回true(0)。如果遇到结束或者产生错误,返回false

     

    示例

    示例来自参考【2】

    #!/bin/sh
    while getopts :ab:c: OPTION;do
        case $OPTION in
        a)echo "get option a"
        ;;
        b)echo "get option b and parameter is $OPTARG"
        ;;
        c)echo "get option c and parameter is $OPTARG"
        ;;
        ?)echo "get a non option $OPTARG and OPTION is $OPTION"
        ;;
        esac
    done

     

     

    一个运行实例

    其中,-a和-b是正确的选项,-p和-c分别对应错误选项的两种情况。

     

     


    本文由 刘英皓 创作,采用 知识共享 署名-非商业性使用-相同方式共享 3.0 中国大陆 许可协议进行许可。欢迎转载,请注明出处:
    转载自:http://www.cnblogs.com/yinghao1991/p/7123550.html

     

     

    参考

    【1】man bash

    【2】D.坦思.linux与unix shell编程指南.机械工业出版社.2000-1

  • 相关阅读:
    [转]unichar和初始化
    一些语言特性整理——预处理指令、volatile、标准预定义宏
    [开源项目]Adium——MAC下IM聚合客户端
    解决安卓7.0以后https抓不到包的问题
    MOSS2010 客户端对象模型开发(一)
    MOSS2010 客户端对象模型开发(四)
    MOSS2010 工作流不能自动启动问题
    MOSS2010 备份与还原小插曲
    Silverlight 5 研究(1)
    MOSS2010之大文件存储方案
  • 原文地址:https://www.cnblogs.com/yinghao-liu/p/7123550.html
Copyright © 2020-2023  润新知