让bash getopts做点什么

让bash getopts做点什么,bash,Bash,我试图弄清楚如何使用bash getopts来处理命令行。我有以下代码: while getopts "e:n:t:s:h" opt do echo $opt done 我使用bash命令行调用它,如下所示: /testopts.sh-e MyE-s圣洁 什么也没印出来 请帮助&2回显“$0:Error:$@”;return 1;} 必需的_arg(){err“选项-$1需要参数”;} checkarg(){[“$1”=~${o

我试图弄清楚如何使用bash getopts来处理命令行。我有以下代码:

    while getopts "e:n:t:s:h" opt
        do

            echo $opt
        done
我使用bash命令行调用它,如下所示:

/testopts.sh-e MyE-s圣洁

什么也没印出来


请帮助

将仅为您打印开关
e
s
,但要打印传递的参数,您还需要回显
$OPTARG

像这样的脚本:

while getopts "e:n:t:s:h" opt
do
   echo $opt $OPTARG
done

这是我用于参数处理的模板

它远不是最优的(例如,使用过多的sed,而不是内置的bash正则表达式等等),但您可以从一开始就使用它:

#!/bin/bash

#define your options here
OPT_STR=":hi:o:c"

#common functions
err() { 1>&2 echo "$0: Error: $@"; return 1; }
required_arg() { err "Option -$1 need argument"; }
checkarg() { [[ "$1" =~ ${optre:--} ]] && { required_arg "$2"; return 1; } || { echo "$1" ; return 0; } }
phelp() { err "Usage: $0" "$(sed 's/^://;s/\([a-zA-Z0-9]\)/ -&/g;s/:/ [arg] /g;s/  */ /g' <<< "$OPT_STR")"; return 1; }

do_work() {
    echo "Here should go your script for processing $1"
}

## MAIN
declare -A OPTION
optre=$(sed 's/://g;s/.*/-[&]/' <<<"$OPT_STR")
while getopts "$OPT_STR" opt;
do
    #change here i,o,c to your options
    case $opt in
    i) OPTION[$opt]=$(checkarg "$OPTARG" $opt) || exit 1;;
    o) OPTION[$opt]=$(checkarg "$OPTARG" $opt) || exit 1;;
    c) OPTION[$opt]=1;;
    h) phelp || exit 1;;
    :) required_arg "$OPTARG" || exit 1 ;;
    \?) err "Invalid option: -$OPTARG" || exit 1;;
    esac
done

shift $((OPTIND-1))
#change here your options...
echo "iarg: ${OPTION[i]:-undefined}"
echo "oarg: ${OPTION[o]:-undefined}"
echo "carg: ${OPTION[c]:-0}"
echo "remainder args: =$@="

for arg in "$@"
do
    do_work "$arg"
done
#/bin/bash
#在此处定义您的选项
OPT_STR=“:hi:o:c”
#共同功能
err(){1>&2回显“$0:Error:$@”;return 1;}
必需的_arg(){err“选项-$1需要参数”;}
checkarg(){[“$1”=~${optre:--}]&&{required_arg“$2”;返回1;}|{echo“$1”;返回0;}

phelp(){err“用法:$0”“$(sed's/^://;s/\([a-zA-Z0-9]\)/-&/g;s/://[arg]/g;s/*//g'一些谷歌怎么样?我不是在寻找反例。我在试图理解为什么我的示例不起作用。在我的示例中,我希望至少打印参数,我理解为什么没有打印值。你的意思是为什么没有打印-e和-s?当我使用你时,它们是为我打印的r代码示例位于顶部。
#!/bin/bash

#define your options here
OPT_STR=":hi:o:c"

#common functions
err() { 1>&2 echo "$0: Error: $@"; return 1; }
required_arg() { err "Option -$1 need argument"; }
checkarg() { [[ "$1" =~ ${optre:--} ]] && { required_arg "$2"; return 1; } || { echo "$1" ; return 0; } }
phelp() { err "Usage: $0" "$(sed 's/^://;s/\([a-zA-Z0-9]\)/ -&/g;s/:/ [arg] /g;s/  */ /g' <<< "$OPT_STR")"; return 1; }

do_work() {
    echo "Here should go your script for processing $1"
}

## MAIN
declare -A OPTION
optre=$(sed 's/://g;s/.*/-[&]/' <<<"$OPT_STR")
while getopts "$OPT_STR" opt;
do
    #change here i,o,c to your options
    case $opt in
    i) OPTION[$opt]=$(checkarg "$OPTARG" $opt) || exit 1;;
    o) OPTION[$opt]=$(checkarg "$OPTARG" $opt) || exit 1;;
    c) OPTION[$opt]=1;;
    h) phelp || exit 1;;
    :) required_arg "$OPTARG" || exit 1 ;;
    \?) err "Invalid option: -$OPTARG" || exit 1;;
    esac
done

shift $((OPTIND-1))
#change here your options...
echo "iarg: ${OPTION[i]:-undefined}"
echo "oarg: ${OPTION[o]:-undefined}"
echo "carg: ${OPTION[c]:-0}"
echo "remainder args: =$@="

for arg in "$@"
do
    do_work "$arg"
done