繁体   English   中英

linux 脚本中的 while/case 语句问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM