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문이 실행 돼 프로그램이 완전히 종료됩니다.
'리눅스' 카테고리의 다른 글
[linux] 리눅스 원격 접속 서버 (0) | 2023.10.30 |
---|---|
[linux] 리눅스 셸 스크립트 파라미터 변수와 조건문 (11) | 2023.09.21 |
[linux] 리눅스 셸 스크립트 (2) | 2023.09.19 |
[linux] 리눅스 디스크 관리 시스템 (0) | 2023.09.12 |
[linux] 리눅스 패키지 관리 (0) | 2023.09.05 |