介绍Shell脚本的参数解析工具

Crq
Crq
Crq
532
文章
0
评论
2021年6月4日07:04:45
评论
415 2594字阅读8分38秒
摘要

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 |
weinxin
我的微信
这是我的微信扫一扫
Crq
  • 本文由 发表于 2021年6月4日07:04:45
  • 转载请注明:https://www.cncrq.com/9681.html
iproute 安装包中 12个  ip 常用命令 Linux教程

iproute 安装包中 12个 ip 常用命令

一年又一年,我们一直在使用 ifconfig 命令来执行网络相关的任务,比如检查和配置网卡信息。但是ifconfig 已经不再被维护,并且在最近版本的 Linux 中被废除了! ifconfig 命令...
鸡兔同笼——算法详解 Linux教程

鸡兔同笼——算法详解

借助李开复老师的话来聊聊算法的重要性:“算法是计算机科学领域最重要的基石之一,但却受到了国内一些程序员的冷落。许多学生看到一些公司在招聘时要求的编程语言五花八门就产生了一种误解,认为学计算机就是学各种...
用完让你跑路的Linux命令! Linux教程

用完让你跑路的Linux命令!

蜘蛛侠有这样的一句信条,“权力越大,责任越大。” 对于 Linux 系统管理员们来说,这也是一种应当采用的明智态度。不,真的,真心感谢 DevOps 的沟通协作和云编排技术,让一个...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: