조건문 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
연산자 사용하기
가끔은 if
와 else
만으로는 부족할 때가 있어. 여러 조건을 고려해야 할 때가 있지. 그럴 때 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
는 배열에서 각 웹사이트를 순환해.if
는ping
을 사용해서 웹사이트의 접속 가능성을 확인해.
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 스크립트에 지능과 로직을 추가할 수 있습니다. 조건문은 상태를 점검하고 결정을 내릴 수 있게 도와주며, 루프는 반복 작업을 자동화할 수 있게 도와줍니다. 앞으로도 작업 자동화를 위한 더 많은 가능성이 기다리고 있습니다!
GO TO FULL VERSION