Linux-getopt命令用法及说明
简介
getopt命令可以接受一系列任意形式的命令行选项和参数,并自动将它们转换成适当的格式。
格式说明
getopt三种使用方式
# 第一种:无法处理带有空格的参数 getopt optstring parameters # 第二种:可以处理带有空格的参数,但是需要结合eval使用 getopt [options] [--] optstring parameters # 第三种:结合eval既可以处理带有空格的参数,也可以定义长选项(一个字母为短选项,一个字母以上是长选项) getopt [options] -o|--options optstring [options] [--] parameters
options:getopt自带的参数定义optstring:自定义选项参数parameters:参数
理解:
通过optstring自定义选项参数字符串格式化传入的parameters(参数),进行输出
要点
双破折线在optstring前和optstring后的区别
- 在optstring前:最后一个参数为双破折线(–);如果定义一个无参数选项(不带冒号)执行时带了参数,参数会在–之后存在;–后如果存在形同自定义选项的写法(-m)会报错;getopt执行的结果值会带有引号
- 在optstring后:optstring – 后面皆为参数;第一个参数为双破折线(–);-- 后如果存在形同自定义选项的写法(-m)不会报错;会将其作为参数进行处理;getopt执行的结果值不会带有引号
选项后一个冒号(:)、两个冒号、没冒号的区别
- 无冒号(:):执行时,只有选项,不带参数。
- 一个冒号(:):执行时必须带有参数(必选)。
- 两个冒号(:):执行时可以选择性带参数,也可以不带(可选)。
多个自定义选项参数之间的分隔
- 长选项:使用逗号(,)分隔
- 短选项:可以使用逗号分隔,也可以不进行分隔,系统自动识别
长短选项执行时注意事项
长选项
- 必选(1冒号):选项和参数之间可以使用等号(=)或空格分隔
- 可选 (2冒号):选项和参数之间必须使用等号(=)进行分隔
使用 -o 或 -l 时,双破折线不能用在optstring前面,需要写在optstring之后(如第三种写法)
getopt命令报错时会继续执行后面的代码,实际使用时需要使用 $? 判断命令执行结果进行处理( 将getopt与eval、set分离处理)
TPS:还有更多细节, 可以实际在Linux命令行进行测验。如使用第三种写法(结合eval、set使用)则基本不会存在问题
使用
Example:
#!/bin/bash
#eval set -- $(getopt -- a:b:s:u "$@")
cmd_getopt=$(getopt -n $0 -o m::f:: -l mark::,file:: -- "$@")
[ $? -ne 0 ] && exit 1
eval set -- "$cmd_getopt"
while [ "$1" ];do
case $1 in
-m|--mark)
mark="$2"
shift 2;;
-f|--file)
file="$2"
shift 2;;
--)
shift
break;;
*)
echo "Usage [-m|-f] operate"
exit 1;;
esac
done
# 查看结果,可根据实际场景调用case中定义的变量
echo mark -- $mark
echo file -- $file总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
centos 6.5下修改SSH端口及禁用root远程登录的方法
Linux各发行版中SSH端口默认为22,如果正式做站或其它用途,为了提高安全性就需要修改掉默认的SSH端口号,防止被有心人穷举密码。这篇文章主要给大家介绍了在centos 6.5系统下修改SSH端口及禁用root远程登录的方法,需要的朋友可以参考借鉴,下面来一起看看吧。2017-02-02
CentOS Linux系统搭建Android开发环境详细介绍
这篇文章主要介绍了CentOS Linux系统搭建Android开发环境详细介绍的相关资料,需要的朋友可以参考下2016-11-11
linux下SVN配置实现项目目录自动更新以及源码安装的操作方法
下面小编就为大家分享一篇linux下SVN配置实现项目目录自动更新以及源码安装的操作方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2017-12-12
Apache Hive 通用调优featch抓取机制 mr本地模式
这篇文章主要为大家介绍了Apache Hive 通用调优featch抓取机制 mr本地模式详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2022-08-08
centos redhat系列对抗ddos之居家必备利器 banip.txt
本文可以用于redhat centos 系列 linux 系统的 屏蔽多连接ip,具有抗ddos功能的代码。2010-11-11
Apache加速模块mod_pagespeed安装使用详细介绍
这篇文章主要介绍了Apache加速模块mod_pagespeed安装使用详细介绍,需要的朋友可以参考下2014-03-03


最新评论