当前位置: 首页 > 科技观察

shell脚本的参数解析工具

时间:2023-03-16 19:44:00 科技观察

Argbash是一个代码生成器,可以为您的脚本生成量身定制的解析库。与其他bash模块的通用代码不同,它生成脚本所需的最少代码。此外,如果您不需要100%符合这些CLI标准,您可以生成更简单的代码。Shell脚本参数解析工具1.使用空格分隔使用空格作为参数分隔实际使用./myscript.sh-econf-s/etc-l/usr/lib/etc/hosts执行脚本#!/bin/bashPOSITIONAL=()while[[$#-gt0]];dokey="$1"case$keyin-e|--extension)EXTENSION="$2"shift#pastargumentshift#pastvalue;;-s|--searchpath)SEARCHPATH="$2"shift#pastargumentshift#pastvalue;;-l|--lib)LIBPATH="$2"shift#pastargumentshift#pastvalue;;--default)DEFAULT=YESshift#pastargument;;*)POSITIONAL+=("$1")#saveitinanarrayforlatershift#面食论点;;esacdoneset--"${POSITIONAL[@]}"#restorepositionalparametersechoFILEEXTENSION="${EXTENSION}"echoSEARCHPATH="${SEARCHPATH}"echoLIBRARYPATH="${LIBPATH}"echoDEFAULT="${DEFAULT}"echo"NumberfilesinSEARCHPATHwithEXTENSION:"$(ls-1"${SEARCHPATH}"/*."${EXTENSION}"|wc-l)if[[-n$1]];thenecho"Lastlineofffilespecifiedasnon-opt/lastargument:"tail-1"$1"fi2。使用等号分隔使用等号作为参数分隔实际使用./myscript.sh-e=conf-s=/etc-l=/usr/lib/etc/hosts执行脚本#!/bin/bashforkeyin"$@";docase$keyin-e=*|--extension=*)EXTENSION="${key#*=}"shift#pastargument=value;;-s=*|--searchpath=*)SEARCHPATH="${key#*=}"shift#pastargument=value;;-l=*|--lib=*)LIBPATH="${key#*=}"shift#pastargument=value;;--default)DEFAULT=YESshift#pastargumentwithnovalue;;*);;esacdoneecho"FILEEXTENSION=${EXTENSION}"echo"SEARCHPATH=${SEARCHPATH}"echo"LIBRARYPATH=${LIBPATH}"echo"NumberfilesinSEARCHPATHwithEXTENSION:"$(ls-1"${SEARCHPATH}"/*."${EXTENSION}"|wc-l)if[[-n$1]];thenecho"Lastlineofffilespecifiedasnon-opt/lastargument:"tail-1$1fi|3。使用getopts工具使用第三方工具进行参数解析实际使用。/myscript.sh-h./myscript.sh-v-f实现脚本#!/bin/sh#Reset防止前面使用getopts工具shell(thisisaPOSIXvariable)OPTIND=1#初始化变量名OUTPUT_FILE=""VERSION=0#getopts的缺点是只能处理shortOptions,比如-h,不能--helpformatwhileopts"h?vf:"key;docase"$key"inh|\?)show_helpexit0;;v)VERSION=1;;f)output_file=$OPTARG;;esacdoneshift$((OPTIND-1))["${1:-}"="--"]&&shiftecho"详细=$VERSION,output_file='$output_file',剩菜:$@"|4。使用argbash工具动态解析参数从使用上来说,一般比普通脚本多30多行,但是效果很好。详细信息可通过官网地址了解。https://argbash.io/generate#results#!/bin/bash#ThisisaratherminimalexampleArgbashpotential#Exampletakenfromhttp://argbash.readthedocs.io/en/stable/example.html#[可选参数]#ARG_OPTIONAL_SINGLE([选项],[o],[可选参数帮助消息])#[可选布尔参数]#ARG_OPTIONAL_BOOLEAN([打印],,[布尔可选参数帮助消息])#[固定参数]#ARG_POSITIONAL_SINGLE([位置参数],[位置参数帮助消息],)#[帮助信息]#ARG_HELP([Thegeneralscript'shelpmsg])#ARGBASH_GO#[<--neededbecauseofArgbashecho"Valueof--option:$_arg_option"echo"printis$_arg_print"echo"Valueofpositional-arg:$_arg_positional_arg"#]<--neededbecauseofArgbash|