bash 脚本 - 根据一个输入参数值检查输入参数的数量

问题描述 投票:0回答:1

我必须创建一个 bash 脚本,我需要根据操作类型提供输入参数:插入/更新。 如果是插入,bash 脚本将需要 3 个输入参数,但如果是更新,则需要 4 个参数。操作类型插入/更新也作为输入参数给出。 我如何根据操作类型检查 bash 输入参数并为用户显示 useFunction() ?我如何检查操作类型是否为 I/U 以及是否添加了错误的值?

参数如下:

I - 这是用于以 I 标记为输入参数的操作插入 U - 用于以 U 标记为输入参数的操作更新

我尝试这样做,但没有得到正确的结果。

#!/usr/bin/bash

helpFunction_U() {
    echo "Param 1: test_case_a"
    echo "Param 2: test_value_a"
    echo "Param 3: action"  
    echo "Param 4: date_test_value_a"
    exit }

help_Function_I() {
    echo "Param 1: test_case_a"
    echo "Param 2: test_value_a"    
    echo "Param 3: action"
    exit }

if [ -z "$3" ]    
then if [ "$3" = 'U' ]
     then if [ -z "$1" ] && [ -z "$2" ] && [ -z "$4" ]
          then
              echo "Some or all of the arguments are empty";
              helpFunction_U ;
          fi
     elif [ "$3" = 'I' ]
     then  if [ -z "$1" ] && [ -z "$2" ]
           then
               echo "Some or all of the arguments are empty";
               helpFunction_I ;
           fi
     else echo "Action "$3" unknown";
     fi
else echo "Action is not defined!" ;
     helpFunction_U;
fi
bash shell unix command-line arguments
1个回答
0
投票

只需使用简单的 case 语句即可。 例如:

#!/usr/bin/bash

usage() { cat <<- EOF
    usage: $(basename $0) [-h] test_case_a test_value_a {I | U date_test_value_a}
EOF
}

die() { echo "$* (-h for usage)"; exit 1; } >&2
case $1 in
-h|--help|-?) usage; exit 0;;
esac

case $3 in
I) test $# = 3 || die "Insert requires exactly 3 arguments";;
U) test $# = 4 || die "Update requires exactly 4 arguments";;
"") die "No action given";;
*) die "Invalid action";;
esac

请注意,所有错误消息都需要发送到 stderr(因此

>&2
函数上的
die
重定向)。 另外,不要传播使用量。 发出一条简洁描述问题的错误消息,并且仅在用户明确要求时才编写使用语句。 尽管不幸的是,这是过去几十年来的常见做法,但它是惰性编程。 编写好的错误消息很困难。 仅打印整个使用语句并强迫用户准确找出问题所在是避免编写良好错误消息的懒惰方法。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.