shell getopts
下面的例子可参考:
>cat test4
#!/bin/bash
while getopts "ab:cd:" Option
# b and d take arguments
#
do
case $Option in
a) echo -e "a = $OPTIND";;
b) echo -e "b = $OPTIND $OPTARG";;
c) echo -e "c = $OPTIND";;
d) echo -e "d = $OPTIND $OPTARG";;
esac
done
shift $(($OPTIND - 1))
>sh test4 -a -b foo -cd bar
a = 2
b = 4 foo
c = 4
d = 6 bar
>sh test4 -ab foo
a = 1
b = 3 foo
>sh test4 -a -c
a = 2
c = 3
getopts (Shell内置命令)
处理命令行参数是一个相似而又复杂的事情,为此,C提供了getopt/getopt_long等函数,C++的boost提供了Options库,在shell中,处理此事的是getopts和getopt.
先说一下getopts/getopt的区别吧,getopt是个外部binary文件,而getopts是shell builtin。
[admin@intlqa142055x ~]$ type getopt getopt is /usr/bin/getopt [admin@intlqa142055x ~]$ type getopts getopts is a shell builtin |
getopts不能直接处理长的选项(如:--prefix=/home等)
关于getopts的使用方法,可以man bash 搜索getopts
getopts 有两个参数,第一个参数是一个字符串,包括字符和“:”,每一个字符都是一个有效的选项,如果字符后面带有“:”,表示这个字符有自己的参数。 getopts从命令中获取这些参数,并且删去了“-”,并将其赋值在第二个参数中,如果带有自己参数,这个参数赋值在“OPTARG”中。提供getopts的shell内置了OPTARG这个变变,getopts修改了这个变量。
这里变量$OPTARG存储相应选项的参数,而$OPTIND总是存储原始$*中下一个要处理的元素位置。
while getopts ":a:bc" opt #第一个冒号表示忽略错误;字符后面的冒号表示该选项必须有自己的参数
代码实例(getopts.sh):
echo $* while getopts ":a:bc" opt do case $opt in a ) echo $OPTARG echo $OPTIND;; b ) echo "b $OPTIND";; c ) echo "c $OPTIND";; ? ) echo "error" exit 1;; esac done echo $OPTIND shift $(($OPTIND - 1)) #通过shift $(($OPTIND - 1))的处理,$*中就只保留了除去选项内容的参数,可以在其后进行正常的shell编程处理了。 echo $0 echo $* |
执行命令:./getopts.sh -a 11 -b -c
-a 11 -b -c
11
3
b 4
c 5
5
./getopts.sh
#新date程序
if [ $# -lt 1 ]
then
date
else
while getopts mdyDHMSTJjwahr OPTION
do
case $OPTION
in
m)date '+%m';;
d)date '+%d';;
y)date '+%y';;
D)date '+%D';;
H0date '+%H';;
M)date '+%M';;
S)date '+%S';;
T)date '+%T';;
j)date '+%j';;
J)date '+%y%j';;
w)date '+%w';;
a)date '+%a';;
h)date '+%h';;
r)date '+%r';;
/?)echo "无效的选项!$OPTION";;
esac
done
fi
VERBOSE=N
while getopts vc:OPTION
do
case $OPTION
in
c)COPIES=$OPTARG;;
v)VERBOSE=Y;;
/?)echo "无效参数!"
exit 1;;
esac
done
if [ $OPTIND -gt $# ]
then
echo "No file name specified"
exit 2
fi
shift 'expr $OPTIND - 1'
FILE=$1
COPY=0
while [ $COPIES -gt $COPY ]
do
COPY='expr $COPY + 1'
cp $FILE $ {FILE} $ {COPY}
if [ VERBOSE = Y }
then
echo ${FILE} $ {COPY}
fi
done
while getopts "ab:cd:" Option
# b and d take arguments
#
do
case $Option in
a) echo -e "a = $OPTIND";;
b) echo -e "b = $OPTIND $OPTARG";;
c) echo -e "c = $OPTIND";;
d) echo -e "d = $OPTIND $OPTARG";;
esac
done
shift $(($OPTIND - 1))
shell getopts相关推荐
- shell getopts命令
由于shell命令行的灵活性,自己编写代码判断时,复杂度会比较高.使用内部命令 getopts 可以很方便地处理命令行参数.一般格式为: getopts optstring name [args] ...
- shell脚本传可选参数 getopts 和 getopt的方法
写了一个shell脚本,需要向shell脚本中传参数供脚本使用,达到的效果是传的参数可以是可选参数 下面是一个常规化的shell脚本: echo "执行的文件名为: $0";ech ...
- bash/shell 解析命令行参数工具:getopts/getopt
转载自:https://my.oschina.net/leejun2005/blog/202376 bash 脚本中,简单点的参数选项,我们可以直接用位置参数 $1 $2 这样来获取处理了,例如下面这 ...
- shell中的getopt与getopts
Shell中的getopt和getopts都用于命令行选项支持 a. getopts只支持短选项,getopt支持长短选项 b. getopts是Shell内置,getopt为单独的命令 一. get ...
- Linux下Shell脚本命令行参数:getopt、getopts用法
目录 简介 getopt 简介 支持选项 用法 getopt optstring parameters getopt [options] [--] getopt [options] -o|--opti ...
- repo命令添加bin_Linux shell中getopts命令学习--实现一个添加yum源的脚本
这是本人第一次写博客,之前从一些开源技术网站上看到不少大牛和前辈们的文章,从中学习受益.本着开源界的奉献和学习精神,觉得有必要将自己的学习成果拿出来与大家一起交流分享,既当作是一种自我学习的总结也可能 ...
- Shell命令 getopts/getopt用法详解 命令行参数
Shell命令行参数解析getopts/getopt用法详解 在Linux bash中,可以用以下三中方式解析命令行参数: 直接处理:使用$1.$2.$3- 进行解析 getopts:短选项的情况,例 ...
- python getopts_linux bash shell 中getopts 命令 和 python 中 getopt 函数的比较总结
在 python 中有个获取命令行参数的函数叫 getopt(args, shortopts, longopts=[]) 通常我们使用的时候是如下的形式: import sys import geto ...
- 高级shell扩展---getopts命令
getopts getopts是linux系统中的一个内置变量,一般用在循环中.每当执行循环时,getopts都会检查下一个命令选项,如果这些选项出现在option中,则表示是合法选项,并将这些合法选 ...
最新文章
- MFC C++ 获取外网IP地址
- mysql读取整张表_mysql 一个表里的信息是读取另一张表来的
- 一些SAP UI5的控件无法按照预期渲染的错误分析方法和解决方案
- future java 多线程_Java多线程之Future与FutureTask
- python动力学建模与仿真_PyMC3中的简单动力学模型
- 一道笔试题的解法和联想
- 各家usbcan分析仪以及各家软件使用经验
- java毕设答辩准备
- 【云原生】Docker高级篇之网络、compose、可视化、监控
- c语言自评报告怎么写,大学生学生自评报告怎么写
- scp远程传输文件之权限被拒绝解决方案
- 懒人库ButterKnife的应用
- 给童鞋萌康康关于代码块(static代码块)的小知识
- 网络安全实验--网络嗅探器
- 2022年义乌医院三基考试临床检查多选专项模拟题及答案
- 华为荣耀5c的语言是英文,原来华为手机自带翻译功能,千万别浪费了!
- uniform crossover(均匀交叉),遗传算法(Genetic Algorithm,GA),python
- 单片机编程自己编写的一个很简单的传感器控制代码
- 说说$strobe,$monitor 和 $display 的差别
- QQ已经被恶意外挂破坏
热门文章
- 【Python-ML】SKlearn库RANSAC拟合高鲁棒性回归模型
- Python学习一——Python下载安装
- PCA计算流程详解与实现(Python详细编码,全部测试正确,与sklearn完全一致,只有7行代码)
- 深度学习(二十七)可视化理解卷积神经网络(反池化 pooling unpooling)
- 函数注意事项和细节讨论
- Python 技术篇-不使用os模块判断指定路径是文件还是文件夹,使用pathlib库判断文件和文件夹
- Python 技术篇-文件操控:文件的移动和复制
- pandas.DataFrame.multiply()含义解释
- Centos(阿里云) 安装python3.4以及pip3
- 11.6 java中jar包使用