현재 디렉토리에 있는 파일 목록은 다음과 같습니다.
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