사례 진술 bash 스크립트에서는 여러 선택 사항에 대해 결정을 내려야 할 때 사용됩니다. 즉, 표현식이 여러 값을 가질 가능성이 있을 때 유용합니다. 이 방법은 스크립트의 여러 if 문을 대체하는 것으로 볼 수 있습니다. Case 문은 코드의 가독성을 높이고 유지 관리가 더 쉽기 때문에 if 문보다 우위에 있습니다. Bash 스크립트의 Case 문은 C 언어의 Case 문과 매우 유사합니다. 그러나 C와 달리 Bash Case 문은 일치가 발생하자마자 검색 계속을 중지합니다. 간단히 말해서, 패턴 검색을 더 이상 중지하기 위해 C에서 사용해야 하는 break 문이 필요하지 않습니다.
Case 문의 기본 구문은 다음과 같습니다.
통사론:
case EXPRESSION in Pattern_Case_1) STATEMENTS ;; Pattern_Case_1) STATEMENTS ;; Pattern_Case_N) STATEMENTS ;; *) STATEMENTS ;; esac>
Case 문이 작동하는 방식은 다음과 같습니다.
EXPRESSION>일치 항목을 찾기 위해 다양한 패턴(케이스)에 대해 평가되는 변수 또는 값입니다.- Case 문은 키워드로 시작합니다.
case>그 다음에EXPRESSION>평가됩니다. - 각 사례는 다음과 같이 정의됩니다.
Pattern_Case>비교 대상이 되는 특정 값이나 패턴을 나타내는 것입니다.EXPRESSION>. - 각 후
Pattern_Case>, 다음과 같은 경우 실행할 명령문이 있습니다.EXPRESSION>특정 일치Pattern_Case>. 이러한 진술은 다음과 같이 표시됩니다.STATEMENTS>. - 그만큼
;;>각각의 끝에STATEMENTS>블록은 케이스 블록의 끝을 나타냅니다. - 그만큼
*)>이는 기본 사례로 알려진 특별한 경우입니다. 이전 패턴 중 어느 것도 일치하지 않는 경우EXPRESSION>,STATEMENTS>아래의*)>블록이 실행됩니다. - 그만큼
esac>키워드는 Case 문의 끝을 표시합니다.
- 일치하는 패턴이 없는 경우 반환 상태는 0입니다. 그렇지 않으면 반환 상태는 일치하는 패턴 케이스의 실행된 본문의 종료 상태입니다.
- C가 기본 문에 대한 기본 키워드를 제공하는 것처럼 Bash 케이스 문에서도 마찬가지로 와일드카드 별표 기호(*)를 사용하고 최종 패턴 케이스를 정의하여 기본 케이스를 정의할 수 있습니다.
예 1: 각 옵션에 대한 설명 출력
이 예에서는 스크립트를 통해 사용자가 부서를 선택할 수 있으며 echo 명령을 사용하여 입력에 해당하는 설명을 표시합니다. 이 스크립트에서는 DEPARTMENT 변수를 Computer Science로 할당했습니다. 따라서 첫 번째 패턴 케이스의 본문이 실행됩니다.
아래 지침을 따를 수 있습니다.
1. 터미널을 열고(Ctrl + Alt + T) 스크립트를 생성합니다.
department.sh>
2. 스크립트에 다음 문을 추가합니다.
#!/bin/bash DEPARTMENT='Computer Science' echo -n 'Your DEPARTMENT is ' case $DEPARTMENT in 'Computer Science') echo -n 'Computer Science' ;; 'Electrical and Electronics Engineering' | 'Electrical Engineering') echo -n 'Electrical and Electronics Engineering or Electrical Engineering' ;; 'Information Technology' | 'Electronics and Communication') echo -n 'Information Technology or Electronics and Communication' ;; *) echo -n 'Invalid' ;; esac>
3. 각 행은 아래에 설명되어 있습니다.
- 스크립트의 첫 번째 줄은 셔뱅(#!)으로 시작됩니다.
- 이는 운영 체제에 특정 인터프리터를 사용하여 스크립트를 구문 분석하도록 지시합니다.
- DEPARTMENT 변수를 Computer Science로 초기화했습니다.
- 이제 우리는 Case 문을 사용하고 있습니다.
- 각 표현식은 Case 문을 통해 처리되었습니다.
- 마지막 줄인 esac는 Case 문을 종료하는 데 사용되었습니다.
4. 스크립트를 저장하고 실행 가능하게 만듭니다.
chmod +x department.sh>
5. 스크립트를 실행합니다.
./department.sh>
산출:

예 2: 다중 패턴 사용 사례
각 절에서 여러 패턴 케이스를 사용할 수 있습니다. 표현식이 하나 이상의 패턴 케이스와 일치하면 해당 절의 본문이 실행됩니다. 이 스크립트에서는 DEPARTMENT 변수를 전자 및 통신으로 할당했습니다. 세 번째 패턴 케이스에는 파이프( | ) 연산자로 구분된 두 개의 값이 있습니다. 따라서 세 번째 패턴 케이스의 본문이 실행됩니다.
아래 지침을 따를 수 있습니다.
1. 터미널을 열고(Ctrl + Alt + T) 스크립트를 생성합니다.
department.sh>
2. 스크립트에 다음 문을 추가합니다.
#!/bin/bash DEPARTMENT='Electronics and Communication' echo -n 'Your DEPARTMENT is ' case $DEPARTMENT in 'Computer Science') echo -n 'Computer Science' ;; 'Electrical and Electronics Engineering' | 'Electrical Engineering') echo -n 'Electrical and Electronics Engineering or Electrical Engineering' ;; 'Information Technology' | 'Electronics and Communication') echo -n 'Information Technology or Electronics and Communication' ;; *) echo -n 'Invalid' ;; esac>
3. 각 라인은 아래에서 논의되었습니다.
- 스크립트의 첫 번째 줄은 셔뱅(#!)으로 시작됩니다.
- 이는 운영 체제에 특정 인터프리터를 사용하여 스크립트를 구문 분석하도록 지시합니다.
- DEPARTMENT 변수를 전자 및 통신으로 초기화했습니다.
- 이제 우리는 Case 문을 사용하고 있습니다.
- 각 표현식은 Case 문을 통해 처리되었습니다.
- 마지막 줄인 esac는 Case 문을 종료하는 데 사용되었습니다.
4. 스크립트를 저장하고 실행 가능하게 만듭니다.
chmod +x department.sh>
5. 스크립트를 실행합니다.
./department.sh>
산출:
예제 3: for 루프
이 스크립트에서는 DEPARTMENT 배열에 한 학급의 세 학생으로 구성된 부서를 할당했습니다. 즉, DEPARTMENT 변수에 설명된 둘 이상의 표현식을 처리하려고 합니다. 여러 표현식을 반복하려면 for 루프를 사용할 수 있습니다.
아래 지침을 따를 수 있습니다.
1. 터미널을 열고(Ctrl + Alt + T) 스크립트를 생성합니다.
department.sh>
2. 스크립트에 다음 문을 추가합니다.
#!/bin/bash DEPARTMENT=('Electronics and Communication' 'Computer Science' 'Information Technology') for value in '${DEPARTMENT[@]}' do case $value in 'Computer Science') echo -n 'Computer Science ' ;; 'Electrical and Electronics Engineering' | 'Electrical Engineering') echo -n 'Electrical and Electronics Engineering or Electrical Engineering ' ;; 'Information Technology' | 'Electronics and Communication') echo -n 'Information Technology or Electronics and Communication ' ;; *) echo -n 'Invalid ' ;; esac done> 3. 각 행은 아래에 설명되어 있습니다.
- 스크립트의 첫 번째 줄은 셔뱅(#!)으로 시작됩니다.
- 이는 운영 체제에 특정 인터프리터를 사용하여 스크립트를 구문 분석하도록 지시합니다.
- 세 개의 문자열 리터럴을 사용하여 DEPARTMENT 배열을 초기화했습니다.
- 이제 for-loop의 도움으로 요소 배열을 반복합니다.
- 각 표현식은 Case 문을 통해 처리되었습니다.
- 마지막 줄인 esac는 Case 문을 종료하는 데 사용되었습니다.
4. 스크립트를 저장하고 실행 가능하게 만듭니다.
chmod +x department.sh>
5. 스크립트를 실행합니다.
./department.sh>
산출:

예 4: 사용자에게 예 또는 아니요를 묻는 메시지 표시
아래 지침을 따를 수 있습니다.
123movies와 유사한 영화 웹사이트
1. 터미널을 열고(Ctrl + Alt + T) 스크립트를 생성합니다.
department.sh>
2. 스크립트에 다음 문을 추가합니다.
#!/bin/bash echo -n 'Are you a student? [yes or no]: ' read response case $response in 'Y' | 'y' | 'YES' | 'Yes' | 'yes') echo -n 'Yes, I am a student.' ;; 'N' | 'n' | 'No' | 'NO' | 'no' | 'nO') echo -n 'No, I am not a student.'; ;; *) echo -n 'Invalid input' ;; esac>
3. 각 라인에 대한 설명은 다음과 같습니다.
- 스크립트의 첫 번째 줄은 셔뱅(#!)으로 시작됩니다.
- 이는 운영 체제에 특정 인터프리터를 사용하여 스크립트를 구문 분석하도록 지시합니다.
- 사용자에게 '당신은 학생입니까?'라는 메시지가 표시됩니다. [예 혹은 아니오].
- 이제 사용자는 키보드를 통해 응답을 제공합니다.
- 응답 출력은 Case 문을 통해 처리되었습니다.
- 마지막 줄인 esac는 Case 문을 종료하는 데 사용되었습니다.
4. 스크립트를 저장하고 실행 가능하게 만듭니다.
chmod +x department.sh>
5. 아래 명령을 사용하여 스크립트를 실행합니다.
./department.sh>
산출:

예제 5: 프로세스에 신호 보내기
아래 지침을 따를 수 있습니다.
1. 터미널을 열고(Ctrl + Alt + T) 스크립트를 생성합니다.
signals.sh>
2. 스크립트에 다음 문을 추가합니다.
#!/bin/bash if [ $# -lt 2 ] then echo 'Usage :Signalnumber PID' exit fi # Case statement # Signal number (expression) case '' in 1) echo 'Sending SIGHUP signal.....' kill -SIGHUP ;; 2) echo 'Sending SIGINT signal.....' kill -SIGINT ;; 3) echo 'Sending SIGQUIT signal.....' kill -SIGQUIT ;; 4) echo 'Sending SIGKILL signals.....' kill -SIGKILL ;; *) echo 'Signal number has not been processed' ;; esac> 사례 진술 bash 스크립트에서는 여러 선택 사항에 대해 결정을 내려야 할 때 사용됩니다. 즉, 표현식이 여러 값을 가질 가능성이 있을 때 유용합니다. 이 방법은 스크립트의 여러 if 문을 대체하는 것으로 볼 수 있습니다. Case 문은 코드의 가독성을 높이고 유지 관리가 더 쉽기 때문에 if 문보다 우위에 있습니다. Bash 스크립트의 Case 문은 C 언어의 Case 문과 매우 유사합니다. 그러나 C와 달리 Bash Case 문은 일치가 발생하자마자 검색 계속을 중지합니다. 간단히 말해서, 패턴 검색을 더 이상 중지하기 위해 C에서 사용해야 하는 break 문이 필요하지 않습니다.
Case 문의 기본 구문은 다음과 같습니다.
통사론:
case EXPRESSION in Pattern_Case_1) STATEMENTS ;; Pattern_Case_1) STATEMENTS ;; Pattern_Case_N) STATEMENTS ;; *) STATEMENTS ;; esac>Case 문이 작동하는 방식은 다음과 같습니다.
EXPRESSION>일치 항목을 찾기 위해 다양한 패턴(케이스)에 대해 평가되는 변수 또는 값입니다.- Case 문은 키워드로 시작합니다.
case>그 다음에EXPRESSION>평가됩니다.- 각 사례는 다음과 같이 정의됩니다.
Pattern_Case>비교 대상이 되는 특정 값이나 패턴을 나타내는 것입니다.EXPRESSION>.- 각 후
Pattern_Case>, 다음과 같은 경우 실행할 명령문이 있습니다.EXPRESSION>특정 일치Pattern_Case>. 이러한 진술은 다음과 같이 표시됩니다.STATEMENTS>.- 그만큼
;;>각각의 끝에STATEMENTS>블록은 케이스 블록의 끝을 나타냅니다.- 그만큼
*)>이는 기본 사례로 알려진 특별한 경우입니다. 이전 패턴 중 어느 것도 일치하지 않는 경우EXPRESSION>,STATEMENTS>아래의*)>블록이 실행됩니다.- 그만큼
esac>키워드는 Case 문의 끝을 표시합니다.
- 일치하는 패턴이 없는 경우 반환 상태는 0입니다. 그렇지 않으면 반환 상태는 일치하는 패턴 케이스의 실행된 본문의 종료 상태입니다.
- C가 기본 문에 대한 기본 키워드를 제공하는 것처럼 Bash 케이스 문에서도 마찬가지로 와일드카드 별표 기호(*)를 사용하고 최종 패턴 케이스를 정의하여 기본 케이스를 정의할 수 있습니다.
예 1: 각 옵션에 대한 설명 출력
이 예에서는 스크립트를 통해 사용자가 부서를 선택할 수 있으며 echo 명령을 사용하여 입력에 해당하는 설명을 표시합니다. 이 스크립트에서는 DEPARTMENT 변수를 Computer Science로 할당했습니다. 따라서 첫 번째 패턴 케이스의 본문이 실행됩니다.
아래 지침을 따를 수 있습니다.
1. 터미널을 열고(Ctrl + Alt + T) 스크립트를 생성합니다.
department.sh>2. 스크립트에 다음 문을 추가합니다.
#!/bin/bash DEPARTMENT='Computer Science' echo -n 'Your DEPARTMENT is ' case $DEPARTMENT in 'Computer Science') echo -n 'Computer Science' ;; 'Electrical and Electronics Engineering' | 'Electrical Engineering') echo -n 'Electrical and Electronics Engineering or Electrical Engineering' ;; 'Information Technology' | 'Electronics and Communication') echo -n 'Information Technology or Electronics and Communication' ;; *) echo -n 'Invalid' ;; esac>3. 각 행은 아래에 설명되어 있습니다.
- 스크립트의 첫 번째 줄은 셔뱅(#!)으로 시작됩니다.
- 이는 운영 체제에 특정 인터프리터를 사용하여 스크립트를 구문 분석하도록 지시합니다.
- DEPARTMENT 변수를 Computer Science로 초기화했습니다.
- 이제 우리는 Case 문을 사용하고 있습니다.
- 각 표현식은 Case 문을 통해 처리되었습니다.
- 마지막 줄인 esac는 Case 문을 종료하는 데 사용되었습니다.
4. 스크립트를 저장하고 실행 가능하게 만듭니다.
chmod +x department.sh>5. 스크립트를 실행합니다.
./department.sh>산출:
예 2: 다중 패턴 사용 사례
각 절에서 여러 패턴 케이스를 사용할 수 있습니다. 표현식이 하나 이상의 패턴 케이스와 일치하면 해당 절의 본문이 실행됩니다. 이 스크립트에서는 DEPARTMENT 변수를 전자 및 통신으로 할당했습니다. 세 번째 패턴 케이스에는 파이프( | ) 연산자로 구분된 두 개의 값이 있습니다. 따라서 세 번째 패턴 케이스의 본문이 실행됩니다.
아래 지침을 따를 수 있습니다.
1. 터미널을 열고(Ctrl + Alt + T) 스크립트를 생성합니다.
department.sh>2. 스크립트에 다음 문을 추가합니다.
#!/bin/bash DEPARTMENT='Electronics and Communication' echo -n 'Your DEPARTMENT is ' case $DEPARTMENT in 'Computer Science') echo -n 'Computer Science' ;; 'Electrical and Electronics Engineering' | 'Electrical Engineering') echo -n 'Electrical and Electronics Engineering or Electrical Engineering' ;; 'Information Technology' | 'Electronics and Communication') echo -n 'Information Technology or Electronics and Communication' ;; *) echo -n 'Invalid' ;; esac>3. 각 라인은 아래에서 논의되었습니다.
- 스크립트의 첫 번째 줄은 셔뱅(#!)으로 시작됩니다.
- 이는 운영 체제에 특정 인터프리터를 사용하여 스크립트를 구문 분석하도록 지시합니다.
- DEPARTMENT 변수를 전자 및 통신으로 초기화했습니다.
- 이제 우리는 Case 문을 사용하고 있습니다.
- 각 표현식은 Case 문을 통해 처리되었습니다.
- 마지막 줄인 esac는 Case 문을 종료하는 데 사용되었습니다.
4. 스크립트를 저장하고 실행 가능하게 만듭니다.
chmod +x department.sh>5. 스크립트를 실행합니다.
./department.sh>산출:
예제 3: for 루프
이 스크립트에서는 DEPARTMENT 배열에 한 학급의 세 학생으로 구성된 부서를 할당했습니다. 즉, DEPARTMENT 변수에 설명된 둘 이상의 표현식을 처리하려고 합니다. 여러 표현식을 반복하려면 for 루프를 사용할 수 있습니다.
아래 지침을 따를 수 있습니다.
1. 터미널을 열고(Ctrl + Alt + T) 스크립트를 생성합니다.
department.sh>2. 스크립트에 다음 문을 추가합니다.
#!/bin/bash DEPARTMENT=('Electronics and Communication' 'Computer Science' 'Information Technology') for value in '${DEPARTMENT[@]}' do case $value in 'Computer Science') echo -n 'Computer Science ' ;; 'Electrical and Electronics Engineering' | 'Electrical Engineering') echo -n 'Electrical and Electronics Engineering or Electrical Engineering ' ;; 'Information Technology' | 'Electronics and Communication') echo -n 'Information Technology or Electronics and Communication ' ;; *) echo -n 'Invalid ' ;; esac done>3. 각 행은 아래에 설명되어 있습니다.
- 스크립트의 첫 번째 줄은 셔뱅(#!)으로 시작됩니다.
- 이는 운영 체제에 특정 인터프리터를 사용하여 스크립트를 구문 분석하도록 지시합니다.
- 세 개의 문자열 리터럴을 사용하여 DEPARTMENT 배열을 초기화했습니다.
- 이제 for-loop의 도움으로 요소 배열을 반복합니다.
- 각 표현식은 Case 문을 통해 처리되었습니다.
- 마지막 줄인 esac는 Case 문을 종료하는 데 사용되었습니다.
4. 스크립트를 저장하고 실행 가능하게 만듭니다.
chmod +x department.sh>5. 스크립트를 실행합니다.
./department.sh>산출:
예 4: 사용자에게 예 또는 아니요를 묻는 메시지 표시
아래 지침을 따를 수 있습니다.
1. 터미널을 열고(Ctrl + Alt + T) 스크립트를 생성합니다.
department.sh>2. 스크립트에 다음 문을 추가합니다.
#!/bin/bash echo -n 'Are you a student? [yes or no]: ' read response case $response in 'Y' | 'y' | 'YES' | 'Yes' | 'yes') echo -n 'Yes, I am a student.' ;; 'N' | 'n' | 'No' | 'NO' | 'no' | 'nO') echo -n 'No, I am not a student.'; ;; *) echo -n 'Invalid input' ;; esac>3. 각 라인에 대한 설명은 다음과 같습니다.
- 스크립트의 첫 번째 줄은 셔뱅(#!)으로 시작됩니다.
- 이는 운영 체제에 특정 인터프리터를 사용하여 스크립트를 구문 분석하도록 지시합니다.
- 사용자에게 '당신은 학생입니까?'라는 메시지가 표시됩니다. [예 혹은 아니오].
- 이제 사용자는 키보드를 통해 응답을 제공합니다.
- 응답 출력은 Case 문을 통해 처리되었습니다.
- 마지막 줄인 esac는 Case 문을 종료하는 데 사용되었습니다.
4. 스크립트를 저장하고 실행 가능하게 만듭니다.
chmod +x department.sh>5. 아래 명령을 사용하여 스크립트를 실행합니다.
./department.sh>산출:
예제 5: 프로세스에 신호 보내기
아래 지침을 따를 수 있습니다.
1. 터미널을 열고(Ctrl + Alt + T) 스크립트를 생성합니다.
signals.sh>2. 스크립트에 다음 문을 추가합니다.
#!/bin/bash if [ $# -lt 2 ] then echo 'Usage : $0 Signalnumber PID' exit fi # Case statement # Signal number (expression) case '$1' in 1) echo 'Sending SIGHUP signal.....' kill -SIGHUP $2 ;; 2) echo 'Sending SIGINT signal.....' kill -SIGINT $2 ;; 3) echo 'Sending SIGQUIT signal.....' kill -SIGQUIT $2 ;; 4) echo 'Sending SIGKILL signals.....' kill -SIGKILL $2 ;; *) echo 'Signal number $1 has not been processed' ;; esac>3. 각 라인에 대한 설명은 다음과 같습니다.
- $1은 신호 번호이고 $2는 프로세스 ID입니다.
- 주어진 프로세스 ID에 신호를 전달하거나 보내려면 kill 명령을 사용합니다.
- 그러면 몇 초 동안 sleep 명령이 실행됩니다.
- 선택적 마지막 비교 *)의 본문은 기본 경우에 실행됩니다.
4. 스크립트를 저장합니다.
5. 아래 명령을 사용하여 스크립트를 실행합니다.
./signals.sh>산출:
$ sleep 10000 $ ps -a | grep sleep 23277 pts/2 00:00:00 sleep $ ./signals.sh 9 31231 Sending SIGKILL signal $ sleep 10000 Killed>
3. 각 라인에 대한 설명은 다음과 같습니다.
- 은 신호 번호이고 는 프로세스 ID입니다.
- 주어진 프로세스 ID에 신호를 전달하거나 보내려면 kill 명령을 사용합니다.
- 그러면 몇 초 동안 sleep 명령이 실행됩니다.
- 선택적 마지막 비교 *)의 본문은 기본 경우에 실행됩니다.
4. 스크립트를 저장합니다.
5. 아래 명령을 사용하여 스크립트를 실행합니다.
./signals.sh>
산출:
$ sleep 10000 $ ps -a | grep sleep 23277 pts/2 00:00:00 sleep $ ./signals.sh 9 31231 Sending SIGKILL signal $ sleep 10000 Killed>
예제 3: for 루프