вложенный оператор case в скрипте оболочки

вложенный оператор case в скрипте оболочки

Ниже приведен список файлов, которые находятся в моем текущем каталоге:

ctc.SNAPSHOT-1.0.1-abc.gz
ctc.SNAPSHOT-2.0.1-bcd.gz
ApprovedList.A
ApprovedList.B

cat ApprovedList.A
BC
DEF

Я хочу передать скрипту 3 параметра, но предполагаю, что скрипт не может прочитать переменную: $num1.

Ниже представлен мой код:

#!/bin/bash

case "$#" in
    0|1|2)
        echo "Correct Usage: $0 A/B/C <rec_name>/ALL <version_number>."
        exit 1
        ;;
esac

ops () {
    echo $line
}

num1=$(for i in *gz; do num=$(echo $i|sed -E -n 's/ctc.*\-(.*)\-.*/\1/p'); echo $num; done)

while read -r line
do
    case "$1" in
        A|B|C)case "$2" in
            $line|ALL)case "$3" in
            $num1)ops;;
        esac;;
esac;;
esac
done < /home/us3r/ApprovedList."$1"

При запуске скрипта он не выдает никаких результатов.

Исполнение: ./script.sh A ALL 1.0.1

Ожидаемый результат:

BC
DEF

Я попробовал приведенный выше код с использованием нескольких ifусловий, и он работает. Я просто хотел сделать свой код более читабельным и компактным, поэтому подумал об использовании caseоператоров.

решение1

Ниже приведен список файлов, которые находятся в моем текущем каталоге:

ctc.SNAPSHOT-1.0.1-abc.gz
ctc.SNAPSHOT-2.0.1-bcd.gz

num1=$(for i in *gz; do num=$(echo $i|sed -E -n 's/ctc.*\-(.*)\-.*/\1/p'); echo $num; done)

Это num1установит1.0.1 2.0.1

Исполнение:./script.sh A ALL 1.0.1

$line|ALL)case "$3" in
            $num1)ops;;
        esac;;

И это не будет соответствовать ему, так как $3это1.0.1

Связанный контент