在我的脚本中,我使用case语句的while循环工作正常,我添加了两个参数作为脚本的输入。所以我在现有的case语句中添加了2个案例。
-a和-d是新添加的块。
我传递的参数如下所示。
test.sh -s NY -t N -f DLY -a 20151022 -d 4
但同样没有得到评估。 -s,-t和-f正在评估。
我是否需要做一些事情来在现有的case语句中添加新案例,对于任何情况,如果它与space有关,如何解决它。花了我一整天的时间,但没有任何线索。
感谢您的回复,提前致谢。以下是代码段。
while [ $# -gt 0 ]; do
case ${1} in
--Src|-s
IN_SRC=$(echo {2} | tr [a-z] [A-Z])
shift;;
--type|-t
IN_TYPE=$(echo {2} | tr [a-z] [A-Z])
shift;;
--fre|-f
IN_FRE=$(echo {2} | tr [a-z] [A-Z])
shift;;
--asofd|-a
IN_DATE=$(echo {2} | tr [a-z] [A-Z])
shift;;
--DayWk|-d
IN_DAYWK=$(echo {2} | tr [a-z] [A-Z])
shift;;
-*)
echo"Error log details"
;;
*) break;;
esac
shift
done
答案 0 :(得分:0)
不
$(echo {2} | tr [a-z] [A-Z])
但
$(echo "$2" | tr [a-z] [A-Z])
# .....^^^^
您需要实际扩展变量。否则,您只需获取文字字符串{2}
还缺少案例分支上的括号。
我强烈建议使用getopts
而不是重新发明这个特定的轮子。如果您需要长选项,请使用getopt
。例如:
declare -u in_src in_type in_fre in_date in_daywk
while getopt s:t:f:a:d: opt; do
case $opt in
s) in_src=$OPTARG ;;
t) in_type=$OPTARG ;;
f) in_fre=$OPTARG ;;
a) in_date=$OPTARG ;;
d) in_daywk=$OPTARG ;;
:) echo "Error: missing argument for -$OPTARG" >&2; exit 1 ;;
?) echo "Error: unknown option: -$OPTARG" >&2; exit 1 ;;
esac
done
shift $((OPTIND - 1))