본문 바로가기
IT/리눅스 쉘 스크립트

[shell script] 쉘 스크립트 기초 #6 - 반복문 for문 개념 및 사용법

by 꾸꾸웍스 2022. 5. 10.
반응형

[shell script] 쉘 스크립트 기초 #6 - 반복문 for문 개념 및 사용법


 

 

※목차

1. 쉘 스크립트 반복문 for문 개념
2. 쉘 스크립트 반복문 for문 사용법 및 예제


 

반응형

 

1. 쉘 스크립트 반복문 for문 개념

 

형식

쉘스크립트 for문 기본 형식

 

for 반복문은 위 형식과 같이 변수에 각각의 값이 들어가 do 안에 있는 반복할 문장을 실행 합니다.

값의 개수 만큼 for문이 반복적으로 실행이 됩니다.

 

for 변수 in 값1 값2 값3 값4 ...
do
            반복할 문장
done

 

작동원리

 

값1,2,3이 각각 숫자 1, 2, 3이라고 가정하에 동작 순서는 아래와 같습니다

 

쉘스크립트 for문 작동원리 사진

 

1. 숫자 1이 AA의 변수에 들어가 반복할 문장에 $AA가 1로 바뀌어

   'This is number 1' 을 출력하고 1의 반복을 종료합니다.

 

쉘스크립트 for문 변수가 들어가는 과정 사진

 

2. 숫자 2가 AA의 변수에 들어가 반복할 문장에 $AA가 2로 바뀌어
   'This is number 2' 을 출력하고 2의 반복을 종료 합니다.

 

쉘스크립트 for문 다음 변수가 AA변수에 들어가는 과정

 

3. 숫자 3이 AA의 변수에 들어가 반복할 문장에 $AA가 3으로 바뀌어
   'This is number 3' 을 출력하고 3의 반복을 종료하고 반복할 값이 없기

   때문에 for문을 종료합니다.

 

쉘 스크립트 for문 마지막 변수가 들어가는 과정

 

실제 예시

 

user@server # cat apple.sh
#!/bin/bash

for AA in 1 2 3
do
        echo "This is number $AA"
done

user@server # ./apple.sh
This is number 1
This is number 2
This is number 3

user@server #

 

 

2. 쉘 스크립트 반복문 for문 사용법 및 예제

 

쉘 스크립트에서 for문을 자주 사용하는 예시와 사용법을 소개하겠습니다

 

값 증가 시키기

seq 명령어를 이용하여 일정 값 증가시키기

  • for문의 반복할 값은 역따옴표(`)로 묶어주며 seq 명령어 사용하고 -w 옵션으로 001 부터 100 까지 
    자리수를 맞춰 출력합니다.
  • 001부터 100까지 출력 줄이 많기 때문에 ...으로 생락하였습니다.

 

user@server # cat -n script.sh
     1  #!/bin/bash
     2
     3  for AA in `seq -w 1 100`
     4  do
     5          echo "$AA"
     6  done
     7

user@server # ./script.sh
001
002
...
100

 

이중괄호를 사용한 값 증가시키기

  • 이중괄호 안의 a값은 0부터 시작하며 10보다는 작고 a값을 증가시키는 for문 입니다.
user@server # cat -n script.sh
     1  #!/bin/bash
     2
     3  for ((a=0; a<10; a++))
     4  do
     5          echo "$a"
     6  done
     7

user@server # ./script.sh
0
1
2
3
4
5
6
7
8
9

 

변수를 활용하여 반복한 값끼리 더하여 값 증가시키기

  • 반복할 숫자 만큼 값을 서로 더하여 값을 계산합니다
  • NUM 변수는 0으로 선언하여 0부터 시작합니다.
  • for문이 다 반복한 후 echo 명령어로 합산된 NUM 변수의 값을 출력합니다.
user@server # cat -n script.sh
     1  #!/bin/bash
     2
     3  NUM=0
     4
     5  for AA in 1 2 3 4 5
     6  do
     7          NUM=$((NUM+AA))
     8  done
     9
    10  echo $NUM
    11

user@server # ./script.sh
15

 

300x250

원하는 파일 목록 반복하기

  • 특정 파일명 혹은 파일 전체에 대한 반복 작업을 할 경우에 사용합니다.
user@server # ls /var/log
anaconda           grubby              messages-20220414  messages-20220424  messages-20220504  security
audit              grubby_prune_debug  messages-20220415  messages-20220425  messages-20220505  spooler
boot               httpd               messages-20220416  messages-20220426  messages-20220506  syslog
boot.log           lastlog             messages-20220417  messages-20220427  messages-20220507  tallylog
boot.log-20211104  maillog             messages-20220418  messages-20220428  messages-20220508  tuned
btmp               messages            messages-20220419  messages-20220429  messages-20220509  wtmp
btmp-20220501      messages-20220410   messages-20220420  messages-20220430  messages-20220510  yum.log
dmesg              messages-20220411   messages-20220421  messages-20220501  mysqld.log         yum.log-20220101
dmesg.old          messages-20220412   messages-20220422  messages-20220502  ntpstats
firewalld          messages-20220413   messages-20220423  messages-20220503  rhsm

 

  • /var/log에 있는 로그들 중  messages 로그파일에 대한 작업 만 하고 싶을때
    명령을 for문에 반복할 값에 넣어 줍니다.
  • messages 단어를 text로 바꿔주는 for문 반복문 입니다.
user@server # cat -n script.sh
     1  #!/bin/bash
     2
     3
     4  for AA in `ls /var/log | grep messages`
     5  do
     6          echo "$AA" | sed 's/messages/text/g'
     7  done
     8
     9

swhong@xcat # ./script.sh
text
text-20220410
text-20220411
text-20220412
....
text-20220510

 


 

배열을 사용한 for문 반복문

  • for문을 사용하여 배열을 함께 사용 할 수 있습니다.
  • seq 명령을 이용하여 01 부터 10까지 출력한 값을 반복값에 두고 01부터 10까지 값에 
    'x'라는 텍스트를 붙여 배열에 저장하고 for문이 끝나면 배열을 한번에 출력합니다.
user@server # cat -n test.sh
     1  #!/bin/bash
     2
     3  DIR=`seq -w 01 10`
     4  LIST=()
     5
     6  for AA in `echo "$DIR"`
     7  do
     8          LIST+=("$AA" x)
     9
    10  done
    11          echo "${LIST[@]}"
    12

user@server # ./test.sh
01 x 02 x 03 x 04 x 05 x 06 x 07 x 08 x 09 x 10 x

 


for문에 if문을 활용하여 짝수 홀수 구분하기

  • for문에 if문을 활용하여 짝수 홀수 구분하는 반복문 입니다.
  • 2로 나누어 나머지가 1인지 0인지를 계산하여 if로 구분합니다.
user@server # cat -n test.sh
     1  #!/bin/bash
     2
     3
     4  for AA in 1 2 3 4 5 6 7 8 9 10
     5  do
     6          DATA=`expr $AA % 2`
     7
     8          if [ $DATA -eq 0 ]; then
     9                  echo "$AA is even"
    10          else
    11                  echo "$AA is odd"
    12          fi
    13
    14  done
    15

user@server # ./test.sh
1 is odd
2 is even
3 is odd
4 is even
5 is odd
6 is even
7 is odd
8 is even
9 is odd
10 is even

 

 


 

반응형
그리드형

댓글