🏷️반복문
- 셸 스크립트에서 반복문을 사용하는 법에 대해 정리한다.
- for문과 while문 모두
do
와 done
사이에 수행문이 들어가게 된다.
- 반복문 내부에
break
와 continue
가 사용 가능하다.
📌for문
;
를 사용하면 for
와 do
를 한 줄에 사용할 수 있다.
- for문의 사용 방법은 크게 두 가지로 다음과 같다.
in
을 사용하여 C#의 foreach문이나 파이썬의 for문처럼 리스트나 배열에서 각각의 요소를 차례로 꺼내쓰는 방법
- C언어처럼 조건식과 증감식을 사용하는 방법
in을 사용하는 for문 (Foreach)
for 변수 in 범위
do
수행문
done
- 범위에 들어가는 요소들은 공백문자로 구분된다.
- 🖇️cf) 공백문자와 공백은 다르다.
- 공백문자는 5개의 문자인 개행문자, 수평탭, 수직탭, 폼피드, 공백의 집합이다.
- 즉, 공백은 말 그대로
space
를 쳤을 때 나오는 공백 문자 중 하나를 뜻한다.
- 다음은 5번을 반복하며 1~5까지 출력하는 가장 간단한 예시다.
#!/bin/sh
for num in 1 2 3 4 5
do
echo $num
done
- 범위에 변수가 올 수도 있다.
- 출력값은 위 예시와 동일하다.
#!/bin/sh
list="1 2 3 4 5"
for num in list
do
echo $num
done
- 범위에는
{n..m}
을 이용하거나, seq
명령어를 사용하면 편하게 사용할 수 있다.
#!/bin/sh
for num in {1..5}
do
echo $num
done
for num in `seq 1 5`
do
echo $num
done
- 🖇️cf) `(back quote)로 명령어를 감싸줘서
seq
의 실행 결과가 곧 범위가 되도록 해줘야 한다.
- 🖇️cf) back quote대신
$(command)
를 사용해도 된다.echo $(date)
- 범위에 환경변수 HOME을 이용하여, 디렉터리 같은 객체를 범위에 사용할 수도 있다.
#!/bin/sh
for file in $HOME/*
do
echo $file
done
- 범위에 배열도 넣을 수 있다.
- 🖇️cf) 배열은
변수=(요소1 요소2 요소3 ...)
로 선언할 수 있다.
${변수[index]}
로 요소를 참조할 수 있다.
$변수
처럼 인덱스를 지정하지 않으면 첫 번째 요소가 출력된다.
${변수[@]}
와 같이 index
대신 @
를 넣으면, 모든 요소를 출력한다.
#!/bin/sh
array=("Monday" "Tuesday" "Wednesday" "Thursday")
for day in ${array[@]}
do
echo $day
done
조건/증감식을 사용하는 for문
for ((변수=초기값; 조건식; 증감문))
do
수행문
done
#!/bin/sh
for ((num=0; num<5; num++))
do
echo $num
done
📌while문
- 변수의 값이 조건을 만족하는 동안만 반복 처리를 하도록 하고 싶을 때 사용한다.
- 횟수를 지정할 땐 for문이 더 낫다.
- while문 구조는 다음과 같다.
while 조건식
do
수행문
done
- 수행문에 증감식을 넣어주지 않으면, 무한 루프가 될 수 있으니 주의한다.
#!/bin/sh
num=0
while [ $num -lt 10 ]
do
echo "$num is less than 10"
num=`expr $num + 1`
done
:
(널 명령어)를 사용하면 무한 루프를 구현할 수 있다.
#!/bin/sh
while :
do
echo "Hello World"
done
- 🖇️cf)
CTRL-C
로 SIGINT를 보내서 프로세스를 종료한다.