반복문

MySprtlty·2022년 7월 10일
0

Bash Shell Script

목록 보기
10/11
post-thumbnail

🏷️반복문

  • 셸 스크립트에서 반복문을 사용하는 법에 대해 정리한다.
  • for문과 while문 모두 dodone사이에 수행문이 들어가게 된다.
  • 반복문 내부에 breakcontinue가 사용 가능하다.

📌for문

  • ;를 사용하면 fordo를 한 줄에 사용할 수 있다.
  • for문의 사용 방법은 크게 두 가지로 다음과 같다.
    1. in을 사용하여 C#의 foreach문이나 파이썬의 for문처럼 리스트나 배열에서 각각의 요소를 차례로 꺼내쓰는 방법
    2. 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)를 사용해도 된다.
    • 🔍ex)
    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
  • 수행문에 증감식을 넣어주지 않으면, 무한 루프가 될 수 있으니 주의한다.

  • 다음은 while문을 사용하는 예시다.
#!/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를 보내서 프로세스를 종료한다.
profile
2Co 4:7

0개의 댓글