#!/bin/bash
for 변수 in 범위 (list, arrray 등)
do
반복할 명령문
done
반복문의 기본 구조는 위와 같습니다. in 뒤에 범위에는 리스트나 배열 등이 올 수 있습니다.
반복할 명령문은 do 와 done 사이에 위치해 있습니다.
for_list.sh
#!/bin/bash
LIST="1 2 3 4 5"
for var in ${LIST}
do
echo var = $var
done
list를 출력하는 for문 입니다.
list를 생성할 때 공백으로 값을 구분해줘야합니다. ,를 사용하면 하나의 값으로 인식합니다.
for_array.sh
#!/bin/bash
Array=(1 2 3 4 5)
for var in "${Array[@]}"
do
echo var = $var
done
배열을 출력하는 for문의 예시입니다.
번외로 배열을 출력할 때 Array[@]로 index를 하나로 지정하면 해당 index에 매칭되는 값이 출력되고 Array[*]로 지정하면 배열 전체를 출력합니다.
for_increase.sh
#!/bin/bash
# case1
for var in {1..10}
do
echo var = $var
done
# case2
for var2 in {1..10..2}
do
echo var2 = $var2
done
case1의 경우
다음과 같이 출력 됩니다.
{시작값..끝값}
형식으로 작성여 시작값부터 1씩 증가하여 끝값까지 점차 증가하는 케이스입니다.
case2의 경우
다음과 같이 출력 됩니다.
{시작값..끝값..증가분}
형식으로 작성여 시작값부터 증가분만큼 증가하여 끝값까지 점차 증가하는 케이스입니다.
multi_for.sh
#!/bin/bash
for ((i=0; i<10; i++)); do
echo $i
done
이중 괄호를 사용하여 다음과 같이 산술연산이 가능합니다.
실행시 다음과 같은 결과를 얻을 수 있습니다.
break_for.sh
for i in {1..10}
do
echo $i
if [ $i == 7 ]; then
echo find 7!
break
fi
done
if문과 break를 활용하여 특정 조건을 만족하면 for문(반복문)을 빠져나올 수 있습니다.
이를 조금 더 응용해서 continue와 break을 같이 사용해보겠습니다.
continue_for.sh
#!/bin/bash
j=0
for i in {1..10}
do
j=`expr $j + $i`
echo i is $i
echo sum of i is $j
echo "============="
if [ "$j" -le 30 ]; then
continue
echo test continue 1
else
echo sum of i is larger then 30!
break
fi
echo test break 1
done
숫자 1부터 10까지 순차적으로 더하여 합이 30이 넘어가면 문구가 출력되며 반복문이 종료되는 코드입니다.
코드를 실행하면 다음과 같은 결과를 확인할 수 있습니다.
코드를 조금 더 살펴보겠습니다.
j=`expr $j + $i`
이 부분을 보면 변수 i와 j 모두 숫자이지만 bash에서는 string으로 취급하기 때문에 두 숫자의 합을 표현할때 위와 같이 표현해야 정상적으로 계산된 값이 출력됩니다.
if [ "$j" -le 30 ]; then
continue
echo test continue 1
else
echo sum of i is larger then 30!
break
fi
echo test break 1
if문을 보면 $j가 30보다 작으면 continue에서 아래로 내려가지 않고 다시 올라가 반복문을 다시 실행합니다. 따라서 test continue 1이 출력되지 않는것을 확인할 수 있습니다.
$j가 30보다 커지면 else문으로 넘어가 문구가 출력되고 break을 통해 반복문이 종료되기 때문에 뒤에 있는 test break 1도 출력되지 않고 끝나는것을 확인할 수 있습니다.