[유닉스] 쉘 스크립트(Shell Script) 제어문 - for, while 문(반복문)


for 문

  • 리스트 안의 각 값들에 대해 지정한 명령을 순차적으로 실행
  • 형식
for 변수 in list
do
    명령
done
  • 스크립트 예
$ cat -n test_for
1 #!/bin/bash
2 #
3 # test for loop
4 #
5
6 for num in 0 1 2
7 do
8 echo Number is $num
9 done
$
  • 실행 결과
$ chmod +x test_for
$ ./test_for
Number is 0
Number is 1
Number is 2
$
  • 외부 파일의 내용 참조
    • $(< file)을 사용하여 file의 내용을 입력으로 받아, white space로 구분되는 단어를 한 번에 한 개씩 처리
    • $(< file)은 cat list로 바꿀 수 있음
  • 스크립트 예
$ cat list
user2
user3
user4
$ cat -n test_for2
1 #!/bin/bash
2 #
3 # test for loop
4 #
5
6 for person in $(< list)
7 do
8 echo Hello, $pserson
9 done
$
  • 실행결과
$ chmod +x test_for2
$ ./test_for2
Hello, user2
Hello, user3
Hello, user4
$
  • 명령행 인자 처리
    • 스크립트 이름과 함께 입력된 명령행 인자는 for 문을 이용해 처리
  • 스크립트 예
$ cat -n test_for3
1 #!/bin/bash
2 #
3 # test for loop
4 #
5
6 for person in $*
7 do
8 echo Hi, $person
9 done
$
  • 실행결과
$ chmod +x test_for3
$ ./test_for3 user2 user3 user4
Hi, user2
Hi, user3
Hi, user4
$


while 문

  • 주어진 조건 명령이 정상 실행되는 동안 do와 done 사이의 명령을 반복 실행
  • 루프가 반복될 때마다 조건 명령을 다시 실행
  • 조건 명령의 종료 값이 항상 0이라면 무한 반복을 할 수도 있음
  • 형식
while 조건명령
do
    명령
done
  • 스크립트 예 : 1~10의 합을 구하는 스크립트
    • 산술, 비교, 논리 연산자를 사용할 때는 (( ))나 let을 사용해야 함
$ cat -n test_while
1 #!/bin/bash
2 #
3 # test while loop
4 #
5
6 count=1
7 sum=0
8 while (( count<=10 ))
9 do
10 (( sum+=count ))
11 let count+=1
12 done
13
14 echo Sum(1~10) : $sum
$
  • 실행 결과
$ chmod +x test_while
$ ./test_while
Sum(1~10) : 55
$