
Ниже приведен список файлов, которые находятся в моем текущем каталоге:
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