본문 바로가기
IT일반/Linux

Command Line - 흐름 제어 : Case 분기

by 버섯도리 2022. 6. 7.
[cmd_test@btjeon-naver ~]$ vi case_menu.sh
---------------------------------------------------------------------------------------
#!/bin/bash

# case_menu: a menu driven system information program

clear
echo "
Please Select:

1. Display System Information
2. Display Disk Space
3. Display Home Space Utilization
0. Quit
"

read -p "Enter selection [0-3] > "

case $REPLY in
        0)      echo "Program terminated."
                exit
                ;;
        1)      echo "Hostname: $HOSTNAME"
                uptime
                ;;
        2)      df -h   
                ;;
        3)      if [[ $(id -u) -eq 0 ]]; then
                        echo "Home Space Utilization (All Users)"
                        du -sh /home/*
                else
                        echo "Home Space Utilization ($USER)"
                        du -sh $HOME
                fi
                ;;
        *)      echo "Invalid entry." >&2
                exit 1
                ;;
esac
---------------------------------------------------------------------------------------
Please Select:

1. Display System Information
2. Display Disk Space
3. Display Home Space Utilization
0. Quit

Enter selection [0-3] > 1
Hostname: btjeon-naver
 06:19:25 up 23 days, 13:32,  2 users,  load average: 0.06, 0.03, 0.05

case 문을 사용한 메뉴 예제 (좀 더 간단해짐.)

 

<case 패턴 예제>

패턴 설명
a) a와 일치하는 단어
[[:alpha:]]) 하나의 알파벳 문자와 일치하는 단어
???) 정확히 세 글자로 이루어진 단어
*.txt) .txt 문자열로 끝나는 단어
*) 모든 단어. 이는 case 문의 마지막 패턴으로 사용된다. 앞선 패턴에서 일치하는 게 없는 단어를 처리하기 위해 사용된다. 즉 유효하지 않은 값을 처리하기 위해 사용된다.

 

[cmd_test@btjeon-naver ~]$ vi case_example.sh
------------------------------------------------------------------------------------------
#!/bin/bash

read -p "Enter word > "

case $REPLY in
        [[:alpha:]])    echo "is a single alphabetic character." ;;
        [ABC][0-9])     echo "is A, B or C folowed by a digit." ;;
        ???)            echo "is three characters long." ;;
        *.txt)          echo "is a word ending in '.txt'" ;;
        *)              echo "is something else." ;;
esac
------------------------------------------------------------------------------------------
[cmd_test@btjeon-naver ~]$ ./case_example.sh 
Enter word > d
is a single alphabetic character.
[cmd_test@btjeon-naver ~]$ ./case_example.sh 
Enter word > C8
is A, B or C folowed by a digit.
[cmd_test@btjeon-naver ~]$ ./case_example.sh 
Enter word > 444
is three characters long.
[cmd_test@btjeon-naver ~]$ ./case_example.sh 
Enter word > ddd.txt
is a word ending in '.txt'
[cmd_test@btjeon-naver ~]$ ./case_example.sh 
Enter word > 88
is something else.

case 패턴 예제

 

[cmd_test@btjeon-naver ~]$ vi case_menu2.sh
---------------------------------------------------------------------------------------------
#!/bin/bash

# case_menu: a menu driven system information program

clear
echo "
Please Select:

A. Display System Information
B. Display Disk Space
C. Display Home Space Utilization
Q. Quit
"

read -p "Enter selection [A, B, C or Q] > "

case $REPLY in
        q|Q)    echo "Program terminated."
                exit
                ;;
        a|A)    echo "Hostname: $HOSTNAME"
                uptime
                ;; 
        b|B)    df -h
                ;;
        c|C)    if [[ $(id -u) -eq 0 ]]; then
                        echo "Home Space Utilization (All Users)"
                        du -sh /home/*
                else
                        echo "Home Space Utilization ($USER)"
                        du -sh $HOME
                fi
                ;;
        *)      echo "Invalid entry." >&2
                exit 1
                ;;
esac
---------------------------------------------------------------------------------------------
[cmd_test@btjeon-naver ~]$ ./case_menu2.sh
Please Select:

A. Display System Information
B. Display Disk Space
C. Display Home Space Utilization
Q. Quit

Enter selection [A, B, C or Q] > A
Hostname: btjeon-naver
 06:22:58 up 24 days, 13:36,  1 user,  load average: 0.00, 0.01, 0.05
[cmd_test@btjeon-naver ~]$ ./case_menu2.sh
Please Select:

A. Display System Information
B. Display Disk Space
C. Display Home Space Utilization
Q. Quit

Enter selection [A, B, C or Q] > a
Hostname: btjeon-naver
 06:23:28 up 24 days, 13:36,  1 user,  load average: 0.00, 0.01, 0.05

case 패턴 결합 예제 -> OR 조건 (|)

 

 

 

 

 

 

출처 : 리눅스 커맨드라인 완벽 입문서