介绍Shell脚本的参数解析工具
Argbash是一个代码生成器,它为你的脚本生成一个量身定制的解析库。与其他bash模块的通用代码不同,它生成你的脚本所需的最少代码。 |
Argbash是一个代码生成器,它为你的脚本生成一个量身定制的解析库。与其他bash模块的通用代码不同,它生成你的脚本所需的最少代码。此外,如果你不需要100%符合那些CLI标准的话,你可以生成更简单的代码。
Shell脚本的参数解析工具
1. 使用空格分隔
使用空格作为参数分隔
实际用法
./myscript.sh -e conf -s /etc -l /usr/lib /etc/hosts
实现脚本
#!/bin/bash POSITIONAL=() while [[ $# -gt 0 ]]; do key="$1" case $key in -e|--extension) EXTENSION="$2" shift # past argument shift # past value ;; -s|--searchpath) SEARCHPATH="$2" shift # past argument shift # past value ;; -l|--lib) LIBPATH="$2" shift # past argument shift # past value ;; --default) DEFAULT=YES shift # past argument ;; *) POSITIONAL+=("$1") # save it in an array for later shift # past argument ;; esac done set -- "${POSITIONAL[@]}" # restore positional parameters echo FILE EXTENSION = "${EXTENSION}" echo SEARCH PATH = "${SEARCHPATH}" echo LIBRARY PATH = "${LIBPATH}" echo DEFAULT = "${DEFAULT}" echo "Number files in SEARCH PATH with EXTENSION:" $(ls -1 "${SEARCHPATH}"/*."${EXTENSION}" | wc -l) if [[ -n $1 ]]; then echo "Last line of file specified as non-opt/last argument:" tail -1 "$1" fi
2. 使用等号分隔
使用等号作为参数分隔
实际用法
./myscript.sh -e=conf -s=/etc -l=/usr/lib /etc/hosts
实现脚本
#!/bin/bash for key in "$@"; do case $key in -e=*|--extension=*) EXTENSION="${key#*=}" shift # past argument=value ;; -s=*|--searchpath=*) SEARCHPATH="${key#*=}" shift # past argument=value ;; -l=*|--lib=*) LIBPATH="${key#*=}" shift # past argument=value ;; --default) DEFAULT=YES shift # past argument with no value ;; *) ;; esac done echo "FILE EXTENSION = ${EXTENSION}" echo "SEARCH PATH = ${SEARCHPATH}" echo "LIBRARY PATH = ${LIBPATH}" echo "Number files in SEARCH PATH with EXTENSION:" $(ls -1 "${SEARCHPATH}"/*."${EXTENSION}" | wc -l) if [[ -n $1 ]]; then echo "Last line of file specified as non-opt/last argument:" tail -1 $1 fi |
3. 使用 getopts 工具
使用第三方工具进行参数解析
实际用法
./myscript.sh -h ./myscript.sh -v -f
实现脚本
#!/bin/sh # 重置以防止在前面的shell中使用getopts工具(这是一个POSIX变量) OPTIND=1 # 初始化变量名称 OUTPUT_FILE="" VERSION=0 # getopts的缺点就是它只能处理短选项,如-h,而不能是--help格式 while getopts "h?vf:" key; do case "$key" in h|\?) show_help exit 0 ;; v) VERSION=1 ;; f) output_file=$OPTARG ;; esac done shift $((OPTIND-1)) [ "${1:-}" = "--" ] && shift echo "verbose=$VERSION, output_file='$output_file', Leftovers: $@" |
4. 使用 argbash 工具
动态的参数解析工具
这个工具主要提供脚本参数的解析功能,而且不再引用任何第三方库的情况下。就我使用而言,一般会比普通脚本多30多行而且,但是效果非常好。
详细信息可以通过官方网站地址了解。
https://argbash.io/generate#results
#!/bin/bash # This is a rather minimal example Argbash potential # Example taken from http://argbash.readthedocs.io/en/stable/example.html # [可选参数] # ARG_OPTIONAL_SINGLE([option], [o], [optional argument help msg]) # [可选布尔参数] # ARG_OPTIONAL_BOOLEAN([print], , [boolean optional argument help msg]) # [固定参数] # ARG_POSITIONAL_SINGLE([positional-arg], [positional argument help msg], ) # [帮助信息] # ARG_HELP([The general script's help msg]) # ARGBASH_GO # [ <-- needed because of Argbash echo "Value of --option: $_arg_option" echo "print is $_arg_print" echo "Value of positional-arg: $_arg_positional_arg" # ] <-- needed because of Argbash |
介绍Shell脚本的参数解析工具相关推荐
- Linux Shell脚本通过参数名传递参数
平常在写shell脚本都是用$1,$2-这种方式来接收参数,然而这种接收参数的方式不但容易忘记且不易于理解和维护.Linux常用的命令都可指定参数名和参数值,然而我们怎样才能给自己的shell脚本也采 ...
- php解析命令行参数选项,PHP 命令行参数解析工具类的示例代码
PHP 命令行参数解析工具类的示例代码 /** * 命令行参数解析工具类 * @author guolinchao */ class CommandLine { // 临时记录短选项的选项值 priv ...
- shell脚本传递参数的方法
在网上看到这边shell 脚本传递参数的方法,觉得写得很详细,收藏起来方便以后查找. 一.接收固定长度的参数 复制代码代码如下: [root@svn shell_example]# cat param ...
- Linux:如何给Shell脚本传入参数
大家都知道普通的bash命令后边可以跟任意的参数,那我们自己编写的脚本是否也支持传递参数呢?答案当然是肯定的 执行"vim test.sh"创建一个新的shell脚本.脚本test ...
- Shell脚本使用jq解析json
安装Homebrew: /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/maste ...
- shell脚本三大文本处理工具
[-]目录 一简介 二grep命令 格式选项 grep与正则表达式结合 egrep和fgrep 三sed命令 sed命令基本用法 sed文本定位 sed基本编辑命令 sed高级编辑命令 四awk命令 ...
- 69:shell脚本介绍 | shell脚本结构 | 执行data命令用法 | shell脚本中变量
2019独角兽企业重金招聘Python工程师标准>>> 1.shell脚本介绍: shell是一种脚本语言和传统的开发语言相比,会比较简单: shell有自己语法,可以支持逻辑判断. ...
- linux下实用小脚本,十个增加 Linux Shell 脚本趣味的小工具
很多人误以为shell脚本只能在命令行下使用.其实shell也可以调用一些GUI组件,例如菜单,警告框,进度条等等.你可以控制最终的输出,光标位置还有各种输出效果.下面我将介绍一些工具,帮助你创建强大 ...
- Python中最好用的命令行参数解析工具
Python 做为一个脚本语言,可以很方便地写各种工具.当你在服务端要运行一个工具或服务时,输入参数似乎是一种硬需(当然你也可以通过配置文件来实现). 如果要以命令行执行,那你需要解析一个命令行参数解 ...
最新文章
- 一线互联网常见的14个Java面试题,你颤抖了吗程序员
- AOP和IOC的作用
- 华为Mate 30系列发布:电影级4摄,麒麟990 5G,没谷歌全家桶,售价高于iPhone11
- MATLAB点云处理:读取、展示、最近邻、ICP算法求取转移矩阵、旋转
- java 文件写_java写入文件的几种方法分享
- 1年工作经验8月份大厂面试全记录
- 分享几个益智题......看你能做对吗?
- 我在项目中对 MySQL 做的优化
- 荣耀正式出售!30余家代理商接盘自救,华为回应...
- PowerDesigner 将 CDM 转为 Oracle SQL建表语句
- 连接查询和子查询哪个效率高
- hooks-riverpod 使用
- 一个牛B程序员的奋斗
- Redis源码分析(十一)--- memtest内存检测
- Bishop 模式识别与机器学习读书笔记 || 线性分类模型之判别函数的几何建模
- 如何实现台达ES系列PLC的组态监控?
- Docker部署neo4j
- 当面试官问「你有什么想问我的吗?」,该如何回答?
- php jpush 本地通知,【图片】iOS10推送通知(本地远程)【小码哥吧】_百度贴吧
- 【每日新闻】2018全球云计算市场盘点!