zoukankan      html  css  js  c++  java
  • 自学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  :长选项
  • 相关阅读:
    PAT B1045 快速排序 (25 分)
    PAT B1042 字符统计 (20 分)
    PAT B1040 有几个PAT (25 分)
    PAT B1035 插入与归并 (25 分)
    PAT B1034 有理数四则运算 (20 分)
    PAT B1033 旧键盘打字 (20 分)
    HDU 1231 最大连续子序列
    HDU 1166 敌兵布阵
    HDU 1715 大菲波数
    HDU 1016 Prime Ring Problem
  • 原文地址:https://www.cnblogs.com/yaoyaojcy/p/9227272.html
Copyright © 2011-2022 走看看