본문 바로가기

리눅스

[linux] 리눅스 쉘 스크립트 반복문

728x90

1. for~in

 

리눅스 쉘 스크립트에서 반복문은 for~in문이 있습니다.

변수에 각각의 값을 넣은 후 do 안에 있는 '반복할 문장'을 실행해

값의 개수만큼 반복을 실행합니다.

 

virtual box에서 리눅스를 실행하고 터미널을 실행합니다.

vi forin.sh를 실행해 vi 에디터를 열고 다음 명령어를 입력합니다.

 

#!/bin/sh
hap=0
for i in 1 2 3 4 5 6 7 8 9 10
do
	hap=`expr $hap + $i`
done
echo "1부터 10까지의 합: "$hap
exit 0

 

3행은 i 변수에 1부터 10을 넣어 5행을 10번 실행한다는 뜻입니다.

5행은 hap에 i 변수의 값을 누적시킵니다.

 

다음 vi forin2.sh로 다음 명령어를 입력합니다.

 

#!/bin/sh
for fn in $(ls *.sh)
do
	echo "$fn"
    	head $fn
done
exit 0

 

현재 디렉터리에 있는 쉘 스크립트 파일(*.sh)의 이름과 앞 행을 출력합니다.

2행은 fn 변수에 ls *.sh 명령의 실행 결과를 하나씩 넣어 4~5행을 출력합니다.

4행에서 파일 이름을 출력하고 5행에서 파일의 내용을 출력합니다.

 

또한 다음과 같이 반복문을 사용할 수 있습니다.

for var in {1..100..5}

이는 일정 값만큼 증감시키면서 반복하는 것으로

각각 시작..끝..증감폭을 의미합니다.

 

이 외에도 범용 프로그래밍 언어의 for 문법을 사용할 수 있습니다.

for ((var=0 ; var < 5 ; var++));

반드시 이중 괄호를 사용해야 하며

for (( ; ; )); 와 같이 무한 루프를 사용할 수도 있습니다.

 

2. while

 

while문은 조건식이 참인 동안 계속 반복 실행합니다.

 

리눅스 쉘 스크립트에선 다음과 같이 작성할 수 있습니다.

 

#!/bin/sh
while [ 1 ]
do
	echo "while 무한 루프"
done
exit 0

 

2행에서 조건식 위치에 [ 1 ] 또는 [ : ]이 오면 항상 참이므로 무한 루프가 됩니다.

실행을 취소하고 싶다면 Ctr + C를 누르시면 됩니다.

 

1부터 10까지의 합계를 출력하는 프로그램을 while문으로 작성해 보겠습니다.

vi while2.sh를 실행하고 아래 명령어를 입력합니다.

 

#!/bin/sh
hap=0
i=1
while [ $i -le 10 ]
do
	hap=`expr $hap + $i`
    	i=`expr $i + 1`
done
echo "1부터 10까지의 합 : "$hap
exit 0

 

4행에서 조건식은 i가 10보다 작거나 같으면 6~7행을 실행한다는 뜻입니다.

 

3. until, break, continue, exit, return

 

until문은 while문과 용도가 거의 같지만 조건식이 참일 때까지

(거짓인 동안) 계속 반복 실행합니다.

 

while2.sh를 until문으로 구현하려면 4행을 until [ $i -gt 10 ]으로 수정해야 합니다.

 

break는 반복문을 종료할 때 주로 사용하며, continue는 반복문의 조건식으로 

돌아가게 합니다.

 

exit는 해당 프로그램을 완전히 종료하며, 함수 안에서 사용할 수 있는 return은 함수를

호출한 곳으로 돌아가게 합니다.

 

vi testb.sh로 vi를 실행하고 아래 명령어를 입력합니다.

 

#!/bin/sh
echo "b: break, c: continue, e: exit)"
while [ 1 ] ; do
	read input
    	case $input in
            b | B)
            	break;;
            c | c)
            	echo "continue while 조건으로 돌아감"
                continue;;
            e | E)
            	echo "exit 프로그램 완전 종료"
                exit 1;;
            esac;
done
echo "break while 종료"
exit 0

 

b를 입력하면 break문이 실행 돼 while문을 빠져나옵니다.

c를 입력하면 continue문이 실행 돼 while문이 한번 더 반복되게 됩니다.

e를 입력하면 exit문이 실행 돼 프로그램이 완전히 종료됩니다.

728x90
반응형