쉘 스크립트의 중첩된 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

관련 정보