verschachtelte Case-Anweisung im Shell-Skript

verschachtelte Case-Anweisung im Shell-Skript

Unten ist die Liste der Dateien, die sich in meinem aktuellen Verzeichnis befinden:

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

cat ApprovedList.A
BC
DEF

Ich möchte dem Skript drei Parameter übergeben, aber ich vermute, dass das Skript die Variable nicht lesen kann $num1:.

Unten ist mein Code:

#!/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"

Wenn ich das Skript ausführe, gibt es keine Ausgabe.

Ausführung: ./script.sh A ALL 1.0.1

Erwartete Ausgabe:

BC
DEF

Ich habe den obigen Code unter mehreren ifBedingungen ausprobiert und er funktioniert. Ich wollte meinen Code nur lesbarer und kompakter machen, also dachte ich daran, caseAnweisungen zu verwenden.

Antwort1

Unten ist die Liste der Dateien, die sich in meinem aktuellen Verzeichnis befinden:

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)

Dies wird eingestellt num1auf1.0.1 2.0.1

Ausführung:./script.sh A ALL 1.0.1

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

Und das wird nicht damit übereinstimmen, denn $3ist1.0.1

verwandte Informationen