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脚本的参数解析工具相关推荐

  1. Linux Shell脚本通过参数名传递参数

    平常在写shell脚本都是用$1,$2-这种方式来接收参数,然而这种接收参数的方式不但容易忘记且不易于理解和维护.Linux常用的命令都可指定参数名和参数值,然而我们怎样才能给自己的shell脚本也采 ...

  2. php解析命令行参数选项,PHP 命令行参数解析工具类的示例代码

    PHP 命令行参数解析工具类的示例代码 /** * 命令行参数解析工具类 * @author guolinchao */ class CommandLine { // 临时记录短选项的选项值 priv ...

  3. shell脚本传递参数的方法

    在网上看到这边shell 脚本传递参数的方法,觉得写得很详细,收藏起来方便以后查找. 一.接收固定长度的参数 复制代码代码如下: [root@svn shell_example]# cat param ...

  4. Linux:如何给Shell脚本传入参数

    大家都知道普通的bash命令后边可以跟任意的参数,那我们自己编写的脚本是否也支持传递参数呢?答案当然是肯定的 执行"vim test.sh"创建一个新的shell脚本.脚本test ...

  5. Shell脚本使用jq解析json

    安装Homebrew: /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/maste ...

  6. shell脚本三大文本处理工具

    [-]目录 一简介 二grep命令 格式选项 grep与正则表达式结合 egrep和fgrep 三sed命令 sed命令基本用法 sed文本定位 sed基本编辑命令 sed高级编辑命令 四awk命令 ...

  7. 69:shell脚本介绍 | shell脚本结构 | 执行data命令用法 | shell脚本中变量

    2019独角兽企业重金招聘Python工程师标准>>> 1.shell脚本介绍: shell是一种脚本语言和传统的开发语言相比,会比较简单: shell有自己语法,可以支持逻辑判断. ...

  8. linux下实用小脚本,十个增加 Linux Shell 脚本趣味的小工具

    很多人误以为shell脚本只能在命令行下使用.其实shell也可以调用一些GUI组件,例如菜单,警告框,进度条等等.你可以控制最终的输出,光标位置还有各种输出效果.下面我将介绍一些工具,帮助你创建强大 ...

  9. Python中最好用的命令行参数解析工具

    Python 做为一个脚本语言,可以很方便地写各种工具.当你在服务端要运行一个工具或服务时,输入参数似乎是一种硬需(当然你也可以通过配置文件来实现). 如果要以命令行执行,那你需要解析一个命令行参数解 ...

最新文章

  1. 一线互联网常见的14个Java面试题,你颤抖了吗程序员
  2. AOP和IOC的作用
  3. 华为Mate 30系列发布:电影级4摄,麒麟990 5G,没谷歌全家桶,售价高于iPhone11
  4. MATLAB点云处理:读取、展示、最近邻、ICP算法求取转移矩阵、旋转
  5. java 文件写_java写入文件的几种方法分享
  6. 1年工作经验8月份大厂面试全记录
  7. 分享几个益智题......看你能做对吗?
  8. 我在项目中对 MySQL 做的优化
  9. 荣耀正式出售!30余家代理商接盘自救,华为回应...
  10. PowerDesigner 将 CDM 转为 Oracle SQL建表语句
  11. 连接查询和子查询哪个效率高
  12. hooks-riverpod 使用
  13. 一个牛B程序员的奋斗
  14. Redis源码分析(十一)--- memtest内存检测
  15. Bishop 模式识别与机器学习读书笔记 || 线性分类模型之判别函数的几何建模
  16. 如何实现台达ES系列PLC的组态监控?
  17. Docker部署neo4j
  18. 当面试官问「你有什么想问我的吗?」,该如何回答?
  19. php jpush 本地通知,【图片】iOS10推送通知(本地远程)【小码哥吧】_百度贴吧
  20. 【每日新闻】2018全球云计算市场盘点!

热门文章

  1. P8可以年入170万,那P10级别的程序猿,每天都在干嘛?
  2. 深度学习vs机器学习 | 这些本质区别你知道多少?
  3. 24本实体书包邮免费送!
  4. python进程执行带有参数的任务(args、kwargs)
  5. MySQL数据库自连接查询inner join ... on
  6. SNMP协议5种报文
  7. 神器!3小时复现 Alexnet 和 word2vec!
  8. AVGCN:利用人类注意力引导的图卷积网络进行轨迹预测
  9. 模拟PLC 的圆弧插补方式在VC中绘制圆弧
  10. Mars说光场(4)— 光场显示