我必须创建一个 bash 脚本,我需要根据操作类型提供输入参数:插入/更新。 如果是插入,bash 脚本将需要 3 个输入参数,但如果是更新,则需要 4 个参数。操作类型插入/更新也作为输入参数给出。 我如何根据操作类型检查 bash 输入参数并为用户显示 useFunction() ?我如何检查操作类型是否为 I/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
只需使用简单的 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
重定向)。 另外,不要传播使用量。 发出一条简洁描述问题的错误消息,并且仅在用户明确要求时才编写使用语句。 尽管不幸的是,这是过去几十年来的常见做法,但它是惰性编程。 编写好的错误消息很困难。 仅打印整个使用语句并强迫用户准确找出问题所在是避免编写良好错误消息的懒惰方法。