• 自学Linux Shell13.2-选项处理(主要getopt、getopts命令)


    点击返回 自学Linux命令行与Shell脚本之路

    Bash shell提供了一些不同的方法来从用户处获得数据,包括以下3中方法:

    13.2-选项处理

    所谓的选项就是跟在破折号后面的单个字母,它能改变命令的行为。三种在脚本处理选项的方法:

    • 查找选项,像命令行参数一样处理
    • getopts命令
    • getopt命令

    1. 查找选项,像命令行参数一样处理

     1.1 处理简单选项

    shift命令默认情况下将每个参数变量向左移动一个位置。 $3的值会移动到$2中,$2的值会移动到1中,$1的值则会被删除。
    shift n 表示移动的位数
    以上脚本通过测试第一个参数值的长度执行了一个while循环,当第一个参数的长度为0时,循环结束,测试完第一个参数后,shift命令会将所有的参数位置移动一个位置

     

     1.2 分离参数和选项

    同时使用参数和选项怎么办,linux使用特殊字符   --    将二者分开,该字符告诉脚本什么时候选项结束以及普通参数什么时候开始。

     1.3 处理带值的选项

     有时候选项会带上一个额外的参数值。此时要求脚本必须能检测到并正确处理。

    2. getopts命令

    由于shell命令行的灵活性,自己编写代码判断时,复杂度会比较高。为此,C提供了getopt/getopt_long等函数,C++的boost提供了Options库,在shell中,处理此事的是getopts和getopt。

    本节首先介绍getopts命令

    1 getopts optstring parameters
    • getopts命令内建于bash shell中
    • getopts命令能够和已有的shell参数变量默契配合
    • getopts命令,每次调用它的时候,它一次只处理命令行上检测到的一个参数
    • getopts命令,有效的选项字母都会列在optstring中
          如果选项字母要求有个参数值就加一个:   
          要去掉一个错误消息的话,可以再opstring之前加一个:
    • getopts命令会用到两个环境变量,
          如果选项需要跟一个参数值,OPTARG环境变量就会保存这个值。
          OPTIND环境变量保存了参数列表中getopts正在处理的参数位置。

    举例1 :

    输入 -a 后面没有参数的的时候,会报错误

     举例2:

     

    输入 -a 后面没有参数的的时候,也会报错误

    举例3:

    optstring位置是h:ms 
    首先最前面没有:,就表示不会提示错误信息
    h:表示选项-h 需要跟一个参数,并保存到OPTARG环境变量中,

    3. getopt命令

     getopts命令来帮助我们处理shell脚本选项和参数,其缺点是只能处理短选项,无法处理长选项。
     getopt是一个外部命令。

    1 getopt  optstring parameters
    • #-o表示短选项,两个冒号表示该选项有一个可选参数,可选参数必须紧贴选项,如-carg 而不能是-c arg
    • #--long表示长选项

    其实大部分都和getopt命令相同,个别不同:

    • 选项:  表示-b选项需要一个参数值
    • -cd 会自动将分成两个独立的选项-c -d  (但此时会插入双破折线分割行中的额外参数)
    • 指定了一个不存在的选项,会产生一条错误信息
    • 如想忽略这条错误信息,可以在命令后加一个-q选项    getopt -q

    4. 两者的比较

    • getopts 是 Shell 内建命令,getopt 是一个独立外部工具
    • getopts 使用语法简单,getopt 使用语法较复杂
    • getopts 不支持长参数(如:--option ),getopt 支持
    • getopts 不会重排所有参数的顺序,getopt 会重排参数顺序
    • getopts 出现的目的是为了代替 getopt, 较快捷的执行参数分析工作

    参数传递的典型用法:

    •  ./test.sh -a -b -c  : 短选项,各选项不需参数
    •  ./test.sh -abc      : 短选项,和上一种方法的效果一样,只是将所有的选项写在一起。
    •   ./test.sh -a args -b -c   :短选项,其中-a需要参数,而-b -c不需参数。
    •   ./test.sh --a-long=args --b-long  :长选项
  • 相关阅读:
    思科完成收买Pari Networks 增强智能办事
    天音控股拟与外企协作
    运营商竞速搭建手机支出公司
    C版iPhone 4入华期近 高性价比将引追逐
    诺基亚否认将中断塞班办事
    联通守旧国际遨游短信提醒
    思科宣布揭晓已完成收买Pari Networks的买卖
    各种“Phone”辈出 购置裸机或更划算
    台湾运营商看好中低端智能机加大推销量
    诺基亚Ovi商店开卖《水果忍者》
  • 原文地址:https://www.cnblogs.com/yaoyaojcy/p/9227272.html
Copyright © 2020-2023  润新知