码迷,mamicode.com
首页 > 系统相关 > 详细

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

时间:2018-06-26 11:05:21      阅读:277      评论:0      收藏:0      [点我收藏+]

标签:循环   while   test   ble   tar   ons   分享图片   图片   解释   

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 是 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  :长选项

本节首先介绍getopts命令

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

#-o表示短选项,两个冒号表示该选项有一个可选参数,可选参数必须紧贴选项
#如-carg 而不能是-c arg
#--long表示长选项
#"$@"在上面解释过
# -n:出错时的信息
# -- :举一个例子比较好理解:
#我们要创建一个名字为 "-f"的目录你会怎么办?
# mkdir -f #不成功,因为-f会被mkdir当作选项来解析,这时就可以使用
# mkdir -- -f 这样-f就不会被作为选项。

 

 

 

 

 

 

 

 

 

 

 

 

命令行参数运行在运行脚本时向命令行添加数据。

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

标签:循环   while   test   ble   tar   ons   分享图片   图片   解释   

原文地址:https://www.cnblogs.com/yaoyaojcy/p/9227272.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!