【问题标题】:How to pass Named Parameter in Shell Script [duplicate]如何在 Shell 脚本中传递命名参数 [重复]
【发布时间】:2021-12-19 12:41:01
【问题描述】:

下面是使用getopts的shell脚本

#!/bin/bash

while getopts "USER:PWD:JOBID:PROJECTID:" flag
do
         case "${flag}" in
                USER) TEST_USER=${OPTARG};;
                PWD) TEST_PWD=${OPTARG};;
                JOBID) TEST_JOBID=${OPTARG};;
                PROJECTID) TEST_PROJECTID=${OPTARG};;
         esac
       
done
echo "USER: $TEST_USER";
echo "PWD: $TEST_PWD";
echo "JOBID: $TEST_JOBID";                  
echo "PROJECTID: $TEST_PROJECTID"; 

Continue of script i have not put here and if above commands work fine then my issue solve 

这是我在终端中运行的输出,哪一个是获取输出命令的正确方法

./getopts.sh -USER=devops@gmail.com -PWD=xxxxxx -JOBID=8a809e2496 -PROJECTID=80e2ea54b231f
OR
./getopts.sh USER=devops@gmail.com PWD=xxxxxx JOBID=8a809e2496 PROJECTID=80e2ea54b231f

运行上述命令后,我得到空响应或字符串 用户: 密码: 工作: 项目编号:

【问题讨论】:

标签: bash shell getopts


【解决方案1】:

您可能需要阅读 getopts 手册页


    while getopts "U:P:J:I:" flag
    do
             case "${flag}" in
                    U) TEST_USER=${OPTARG};;
                    P) TEST_PWD=${OPTARG};;
                    J) TEST_JOBID=${OPTARG};;
                    I) TEST_PROJECTID=${OPTARG};;
             esac
    done
    echo "USER: $TEST_USER";
    echo "PWD: $TEST_PWD";
    echo "JOBID: $TEST_JOBID";
    echo "PROJECTID: $TEST_PROJECTID";
./getopts.sh -U devops@gmail.com -P xxxxxx -J 8a809e2496 -I 80e2ea54b231f
USER: devops@gmail.com
PWD: xxxxxx
JOBID: 8a809e2496
PROJECTID: 80e2ea54b231f

使用 getopt,它更复杂,但它允许长选项和“=”。

    #!/bin/bash
    TEMP=$(getopt -n "$0" -a -l "user:,password:,jobid:,projectid:" -- -- "$@")

    [ $? -eq 0 ] || exit

    eval set --  "$TEMP"

    while [ $# -gt 0 ]
    do
             case "$1" in
                    --user) TEST_USER="$2"; shift;;
                    --password) TEST_PWD="$2"; shift;;
                    --jobid) TEST_JOBID="$2"; shift;;
                    --projectid) TEST_PROJECTID="$2"; shift;;
                    --) shift;;
             esac
             shift;
    done
    echo "USER: $TEST_USER";
    echo "PWD: $TEST_PWD";
    echo "JOBID: $TEST_JOBID";
    echo "PROJECTID: $TEST_PROJECTID";

一些测试:

$ ./test.sh -user=jules -password=kabas -jobid 5555 -projectid 999 -c
./test.sh: unrecognized option '-c'

$ ./test.sh -user=jules -password=kabas -jobid 5555 -projectid 999   
USER: jules
PWD: kabas
JOBID: 5555
PROJECTID: 999

【讨论】:

  • 我试过这个命令它不起作用。/getopts.sh -U=devops@gmail.com -P=xxxxxx -J=8a809e2496 -I=80e2ea54b231f
  • 我从未见过在 unix/linux 命令行参数上使用“=”。
  • 我的客户想要这样,当 getopts "user:password:jobId:projectId:" flag do case "${flag}" in user) TEST_USER=${OPTARG};;密码) TEST_PWD=${OPTARG};; jobId) TEST_JOBID=${OPTARG};; projectId) TEST_PROJECTID=${OPTARG};; ./getopts.sh -user devops@gmail.com -password xxxxxx -jobId 8a809e2496 -projectId 80e2ea54b231f 当我尝试我没有得到任何响应或返回空字符串时请告诉我我能做到吗
  • 在 IT 领域几乎没有什么是不可能的。一切都取决于一个人想在解决方案上投资多少。查看我的编辑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-05
  • 2021-04-16
  • 2018-10-01
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
相关资源
最近更新 更多