CodeGym /행동 /Docker SELF /조건문 (`if`, `else`)과 반복문 (`for`, `while`) bash에서

조건문 (`if`, `else`)과 반복문 (`for`, `while`) bash에서

Docker SELF
레벨 3 , 레슨 4
사용 가능

조건문 if, else와 반복문 for, while bash에서

1. Bash의 조건문: if, else, 그리고 약간의 마법

조건문이 필요한 이유?

조건문을 사용하면 스크립트가 입력 데이터, 변수 또는 명령 실행 결과를 기반으로 결정을 내릴 수 있어. 예를 들어, 파일이 존재하는지 확인하거나 서버가 접근 가능한지 확인해서 다음 작업을 수행하는 경우가 있을 거야. 여기에 if 구문이 유용하지.

기본 문법

Bash에서 클래식 if 조건문은 이렇게 생겼어:

if [ 조건 ]; then
    # 조건이 참일 때 실행될 코드
    echo "조건이 충족되었어!"
else
    # 조건이 거짓일 때 실행될 코드
    echo "조건이 충족되지 않았어!"
fi

키워드:

  • if, then, else, 그리고 fi (if 블록을 닫는 키워드) — 이건 필수 마법의 단어들이야. 없으면 스크립트가 작동 안할 거야.
  • 대괄호 [ ... ]는 조건을 검사하는 데 사용돼.

예제 1: 파일 존재 여부 확인

#!/bin/bash

FILE="/etc/passwd"

if [ -f $FILE ]; then
    echo "파일 $FILE 존재한다."
else
    echo "파일 $FILE 찾을 수 없다."
fi

설명:

  • -f는 파일이 존재하는지를 확인해.
  • 파일이 존재하면 echo 명령이 메시지를 출력해. 그렇지 않으면 else 블록이 실행돼.

명령과 함께 조건문 사용하기

Linux에서는 모든 게 명령어잖아? 명령 실행 결과를 조건으로 사용할 수도 있어.

예제 2: 웹사이트 접근 가능 여부 확인

#!/bin/bash

if ping -c 1 example.com &> /dev/null; then
    echo "웹사이트 가능해."
else
    echo "웹사이트 접근 불가능."
fi

설명:

  • ping -c 1은 서버에 하나의 요청을 보낸다. 응답이 오면 조건이 참이 돼.
  • &> /dev/null은 명령의 출력을 숨겨서 터미널을 깔끔하게 유지해줘.

elif 연산자 사용하기

가끔은 ifelse만으로는 부족할 때가 있어. 여러 조건을 고려해야 할 때가 있지. 그럴 때 elif가 구세주야.

예제 3: 시간대에 따라 인사말 출력

#!/bin/bash

HOUR=$(date +%H)

if [ $HOUR -lt 12 ]; then
    echo "좋은 아침이야!"
elif [ $HOUR -lt 18 ]; then
    echo "좋은 오후야!"
else
    echo "좋은 저녁이야!"
fi

설명:

  • date +%H는 현재 시간을 24시간 형식으로 반환해.
  • 현재 시간을 고정된 값과 비교해: 12보다 적으면 아침, 18보다 적으면 오후, 그 외엔 저녁.

2. Bash에서 루프: 반복은 학습의 어머니

루프는 특정 조건이 만족될 때까지 스크립트가 작업을 반복하도록 만드는 방법이야. 여러 파일을 처리하거나 작업을 여러 번 반복하거나 특정 이벤트를 기다려야 할 때 특히 유용해.

for 루프

for는 값의 리스트(예: 파일 또는 숫자)를 순환하며 각각에 대해 지정된 작업을 수행해.

예제 4: 간단한 for 루프

#!/bin/bash

for i in {1..5}; do
    echo "이건 $i 번째 반복입니다"
done

설명:

  • {1..5} — 숫자 1부터 5까지의 리스트야.
  • 각 반복에서 변수 i는 리스트의 값을 가져.

예제 5: 디렉토리 내 파일 순회

#!/bin/bash

for FILE in /etc/*; do
    echo "파일 처리 중: $FILE"
done

설명:

  • /etc/*/etc 폴더 내 모든 파일의 리스트야.
  • 각 반복에서 변수 FILE는 하나의 파일 이름을 포함해.

while 루프

while은 조건이 만족되는 동안 작업을 수행해.

예제 6: 숫자 맞추기

#!/bin/bash

SECRET=5
GUESS=0

while [ $GUESS -ne $SECRET ]; do
    echo "1에서 10 사이의 숫자를 입력하세요:"
    read GUESS
done

echo "맞췄습니다!"

설명:

  • [ $GUESS -ne $SECRET ] — 입력한 숫자 GUESS가 비밀 숫자 SECRET과 다를 때 조건이 계속 진행돼.

루프와 조건문 결합하기

가끔 조건문과 루프가 조화를 이뤄 작동해.

예제 7: 여러 웹사이트 확인

#!/bin/bash

SITES=("example.com" "google.com" "nonexistent.website")

for SITE in ${SITES[@]}; do
    if ping -c 1 $SITE &> /dev/null; then
        echo "$SITE 접속 가능합니다."
    else
        echo "$SITE 접속 불가능합니다."
    fi
done

설명:

  • 배열 SITES는 웹사이트 목록을 포함해.
  • for는 배열에서 각 웹사이트를 순환해.
  • ifping을 사용해서 웹사이트의 접속 가능성을 확인해.

3. 실습 연습 문제

도메인 확인

도메인 이름을 인수로 받아서 해당 도메인의 접근 가능 여부를 확인하는 스크립트를 작성하세요.

힌트:

if ping -c 1 $1 &> /dev/null; then
    echo "도메인이 사용 가능합니다."
else
    echo "도메인이 사용 불가능합니다."
fi

파일 작업

여러 파일의 존재 여부를 확인하고 각각의 결과를 출력하는 스크립트를 작성하세요.

힌트:

FILES=("file1.txt" "file2.txt" "/etc/passwd")
for FILE in ${FILES[@]}; do
    if [ -f $FILE ]; then
        echo "$FILE 존재합니다."
    else
        echo "$FILE 찾을 수 없습니다."
    fi
done

구구단

1부터 10까지의 숫자에 대해 구구단을 출력하는 중첩 루프 스크립트를 작성하세요.

힌트:

for i in {1..10}; do
    for j in {1..10}; do
        echo -n "$((i * j)) "
    done
    echo ""
done

이제 당신의 bash 스크립트에 지능과 로직을 추가할 수 있습니다. 조건문은 상태를 점검하고 결정을 내릴 수 있게 도와주며, 루프는 반복 작업을 자동화할 수 있게 도와줍니다. 앞으로도 작업 자동화를 위한 더 많은 가능성이 기다리고 있습니다!

코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION