Bash:如何实现对多个大小写转换块的顺序检查?

问题描述 投票:0回答:1

我希望第一个大小写转换块评估第一个和第三个位置参数。如果未定义第一个位置arg,那么我想转到下一个case-switch块,仅评估第三个位置arg。

我的代码如下:

case "$1" in
    X)   case "$3" in
            -d) if [[ "$4" =~ ^[A-Z]+-[0-9]+$ ]]; then
                        CreateMarketDir;
                        SymlinkMarketData;
                    else
                        CreateMarketDir;
                    fi;;
         esac
    *)   echo "Exiting the first Case Block"
         exit;;
esac

case "$3" in
     -c) if [[ "$4" =~ ^[A-Z]+-[0-9]+$ ]]; then
             CreateDCDir;
             SymlinkDCData;
         else
             CreateDCDir;
         fi;;
      *) echo "Please use a valid argument"
          exit;;
esac

但是,只有第一个case-switch块起作用-例如,以下运行OK:

./script.sh X foo -d

但是当我尝试使用以下参数运行时:

./script.sh foo bar -c

我得到此输出:

Please use a valid argument

我假设是,如果第一个位置arg不是X,则脚本应检查下一个case-switch块并评估第三个位置arg。但显然并非如此。

我应该如何实现对多个大小写转换块的顺序检查?

谢谢

bash switch-statement
1个回答
0
投票

如@Barmar正确指出的那样,问题是第一个esac丢失了;;另外,如果脚本应该顺序地通过单独的Case-Switch块,则必须从第一个Case块中删除exit;;,否则整个脚本将停止

© www.soinside.com 2019 - 2024. All rights reserved.