介绍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 做为一个脚本语言,可以很方便地写各种工具.当你在服务端要运行一个工具或服务时,输入参数似乎是一种硬需(当然你也可以通过配置文件来实现). 如果要以命令行执行,那你需要解析一个命令行参数解 ...
最新文章
- java中类加载机制、类加载过程和类加载器层次
- ios Swift 中文学习手册
- Tyvj-TOM的无穷序列
- 利用AutoHotkey实现Vim和Excel的数据传递
- orcle rac启动了,但数据库没有启动的错误解决
- 掘金-Markdown 编辑器使用手册
- java dom获取属性值_java – 获取dom节点的属性
- 使用Apache Lucene 4.3轻松进行搜索
- for else语句小tips : RUNOOB python练习题36
- Unity变量命名的6个重要提示
- 移动Web开发与适配笔记
- JavaScript流程分支结构(1)
- 为什么我们需要研究迁移学习?
- c# asp.net页面传值方法总结
- MySQL 索引分析
- 传输线特性阻抗与阻抗匹配关系【转】
- Visual Basic 概述
- Python-OpenCV双目测距代码实现以及参数解读
- K-median 算法
- 智能快递柜无线组网工业路由器
热门文章
- 全网第一SoTA成绩却朴实无华的PyTorch版EfficientDet
- 快手百度 4.34 亿美元投资知乎;腾讯回应“push团队全部被开”;Android Q Beta 6 发布!...
- pandas高级处理-分组与聚合
- Redis环境配置(核心配置选项)
- HTTP、SSL、TLS,HTTPS简单介绍
- 使用 OpenCV 和 Tesseract 对图像中的感兴趣区域 (ROI) 进行 OCR
- 编程能力如何突飞猛进?
- 为什么特斯拉不使用激光雷达
- 【从零学习OpenCV 4】Image Watch插件的使用
- Fundebug计费标准解释:事件数是如何定义的?