
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 if
Bedingungen ausprobiert und er funktioniert. Ich wollte meinen Code nur lesbarer und kompakter machen, also dachte ich daran, case
Anweisungen 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 num1
auf1.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 $3
ist1.0.1