본문 바로가기
IT일반/Linux

Command Line - 흐름 제어 : While 루프와 Until 루프

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

# while-count: display a series of numbers

count=1

while (( $count <= 5 )); do
        echo $count
        count=$((count + 1))
done
echo "Finished."
---------------------------------------------------------------------------------------------
[cmd_test@btjeon-naver ~]$ ./while_count.sh 
1
2
3
4
5
Finished.

while문 예제

 

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

# while_menu: a menu driven system information program

DELAY=3 # Number of seconds to display results

while [[ $REPLY != 0 ]]; do

        clear
        cat <<- _EOF_
                Please Select:

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

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

        if [[ $REPLY =~ ^[[0-3]$ ]]; then
                if [[ $REPLY == 1 ]]; then
                        echo "Hostname: $HOSTNAME"
                        uptime
                        sleep $DELAY
                fi
                if [[ $REPLY == 2 ]]; then
                        df -h
                        sleep $DELAY
                fi
                if [[ $REPLY == 3 ]]; then
                        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
                        sleep $DELAY
                fi
        else
                echo "Invalid entry."
                sleep $DELAY
        fi
done
echo "Program terminated."
-----------------------------------------------------------------------------------------
[cmd_test@btjeon-naver ~]$ ./while_menu.sh
Please Select:

1. Display System Information
2. Display Disk Space
3. Display Home Space Utilization
0. Quit
Enter selection [0-3] > 0
Program terminated.

while 루프로 개선된 menu script 예제

 

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

# while_menu2: a menu driven system information program

DELAY=3 # Number of seconds to display results

while true; do
        clear
        cat <<- _EOF_
                Please Select:

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

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

        if [[ $REPLY =~ ^[[0-3]$ ]]; then
                if [[ $REPLY == 1 ]]; then
                        echo "Hostname: $HOSTNAME"
                        uptime
                        sleep $DELAY
                        continue
                fi
                if [[ $REPLY == 2 ]]; then
                        df -h
                        sleep $DELAY
                        continue
                fi
                if [[ $REPLY == 3 ]]; then
                        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
                        sleep $DELAY
                        continue
                fi
                if [[ $REPLY == 0 ]]; then
                        break
                fi
        else
                echo "Invalid entry."
                sleep $DELAY
        fi
done
echo "Program terminated."
-------------------------------------------------------------------------------------------

continue, break 구문 사용 예제

 

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

# until-count: display a series of numbers

count=1

until (( $count > 5 )); do
        echo $count
        count=$((count + 1))
done
echo "Finished."
-----------------------------------------------------------------------------------------
[cmd_test@btjeon-naver ~]$ ./until_count.sh 
1
2
3
4
5
Finished.

until문 예제

 

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

# while-read: read lines from a file

while read distro version release; do
        printf "Distro: %s\tVersion: %s\tReleased: %s\n" \
                $distro \
                $version \
                $release
done < distros.txt
------------------------------------------------------------------------------------------
[cmd_test@btjeon-naver ~]$ ./while_read.sh 
Distro: SUSE	Version: 10.2	Released: 12/07/2006
Distro: Fedora	Version: 10	Released: 11/25/2008
Distro: SUSE	Version: 11.0	Released: 06/19/2008
Distro: Ubuntu	Version: 8.04	Released: 04/24/2008
Distro: Fedora	Version: 8	Released: 11/08/2007
Distro: SUSE	Version: 10.3	Released: 10/04/2007
Distro: Ubuntu	Version: 6.10	Released: 10/26/2006
Distro: Fedora	Version: 7	Released: 05/31/2007
Distro: Ubuntu	Version: 7.10	Released: 10/18/2007
Distro: Ubuntu	Version: 7.04	Released: 04/19/2007
Distro: SUSE	Version: 10.1	Released: 05/11/2006
Distro: Fedora	Version: 6	Released: 10/24/2006
Distro: Fedora	Version: 9	Released: 05/13/2008
Distro: Ubuntu	Version: 6.06	Released: 06/01/2006
Distro: Ubuntu	Version: 8.10	Released: 10/30/2008
Distro: Fedora	Version: 5	Released: 03/20/2006

while 문을 이용한 파일 읽기 예제 (while 및 until 명령으로 표준 입력을 처리할 수 있다.)

 

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

# while-read2: read lines from a file

sort -k 1,1 -k 2n distros.txt | while read distro version release; do
        printf "Distro: %s\tVersion: %s\tReleased: %s\n" \
                $distro \
                $version \
                $release
done
----------------------------------------------------------------------------------------------
[cmd_test@btjeon-naver ~]$ ./while_read2.sh 
Distro: Fedora	Version: 5	Released: 03/20/2006
Distro: Fedora	Version: 6	Released: 10/24/2006
Distro: Fedora	Version: 7	Released: 05/31/2007
Distro: Fedora	Version: 8	Released: 11/08/2007
Distro: Fedora	Version: 9	Released: 05/13/2008
Distro: Fedora	Version: 10	Released: 11/25/2008
Distro: SUSE	Version: 10.1	Released: 05/11/2006
Distro: SUSE	Version: 10.2	Released: 12/07/2006
Distro: SUSE	Version: 10.3	Released: 10/04/2007
Distro: SUSE	Version: 11.0	Released: 06/19/2008
Distro: Ubuntu	Version: 6.06	Released: 06/01/2006
Distro: Ubuntu	Version: 6.10	Released: 10/26/2006
Distro: Ubuntu	Version: 7.04	Released: 04/19/2007
Distro: Ubuntu	Version: 7.10	Released: 10/18/2007
Distro: Ubuntu	Version: 8.04	Released: 04/24/2008
Distro: Ubuntu	Version: 8.10	Released: 10/30/2008

sort 적용 후 파일 읽기

 

 

 

 

 

 

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