[英]issue with while/case statement in linux scripting
在我的脚本中,while 循环和 case 语句工作正常,我添加了另外两个参数作为脚本的输入。 所以我在现有的案例陈述中添加了 2 个案例。
-a 和 -d 是新添加的块。
我正在传递与下面相同的参数。
test.sh -s NY -t N -f DLY -a 20151022 -d 4
但同样没有得到评估。 -s、-t 和 -f 评估良好。
我是否需要做一些事情来在现有案例语句中添加新案例,对于任何情况,如果空间有问题如何解决。 花了我一整天的时间,但没有任何线索。
感谢您的回复,提前致谢。 下面是代码片段。
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
不是
$(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))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.