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

时间:2015-10-22 12:36:13

标签: linux shell unix

在我的脚本中,我使用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

1 个答案:

答案 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))