如何在bash脚本中编写getopt

我们走吧

我有一个带有几个参数的函数。例如:

makeUser{
login
email
password}

我想做出这样的标志-l|--login-e|--email-p|--password但我不知道怎么办。

它的示例应类似于以下代码:

./script.sh --mode makeUser --login test --email [email protected] -p testxx

我怎样才能达到那个结果?我只知道如何用getopts(短标志)来做到这一点。

它应该看起来像下面的代码吗?

while true ; do
case "$1" in
    -m|--mode)
        makeUser)
           case "$2" in
              -l|--login)
                 makeUser "$OPTARG"
                    case "$3" in
                       -e|--email)
                           makeUser "$OPTARG"
                              case "$4" in
                                 -p|--password)
                                     makeUser "$OPTARG"
                                     exit $?
                               esac ;;
                    exit $?
                    esac ;;       
            exit $?
            esac ;;    
        makeProject)...
        makeSite)...
    exit $?    
    esac ;;
done
Redimp

使用whileshift使得在bash中getopt的酷似行为干净的解决方案:

while [ $# -gt 0 ]; do
    case "$1" in
        -h|"-?"|--help)
            shift
            echo "usage: $0 [-v] [--mode MODE] [-l login] [-e email] [...]"
            exit 0
            ;;
        --mode)
            MODE=$2
            shift; shift;
            ;;
        -l|--login)
            LOGIN=$2
            shift; shift;
            ;;
        -e|--email)
            EMAIL=$2
            shift; shift;
            ;;
        -v|--verbose)
            VERBOSE=1
            shift;
            ;;
         *)
            echo "Error: unknown option '$1'"
            exit 1
        esac
done

# example function makeUser
makeUser()
{
    login=$1
    email=$2

    echo "function makeUser with login=${login} and email=${email}"
}


if [ "$MODE" == "makeUser" ]; then
    makeUser $LOGIN $EMAIL # ... and so on
fi

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章