리눅스에서 반복 업무를 자동화하는 가장 강력한 도구, 쉘 스크립트! 사용법부터 실전 예제까지 한눈에 확인하세요.
쉘 스크립트란?
리눅스에서 사용하는 일련의 명령어를 텍스트 파일에 저장해 순차적으로 실행할 수 있는 파일을 **쉘 스크립트(shell script)**라고 합니다. .sh 확장자를 가지며, 주로 Bash를 기반으로 작성됩니다.
쉘 스크립트를 써야 하는 이유
- 반복 작업 자동화 (예: 백업, 로그 정리)
- 시스템 관리의 일관성 확보
- 오류 발생률 감소 및 시간 절약
- 크론탭(crontab)과 연동 시 강력한 스케줄링 기능 제공
리눅스 쉘 스크립트, 자동화, Bash, crontab, 스크립트 예제, 리눅스 자동화
쉘 스크립트 작성법 Step-by-Step
1단계. 기본 구조 이해하기
#!/bin/bash
# 주석: 백업 스크립트 예제
DATE=$(date +%F)
BACKUP_DIR="/backup/$DATE"
mkdir -p $BACKUP_DIR
cp -r /home/user/data $BACKUP_DIR
- #!/bin/bash: 스크립트 해석기를 지정
- $(...): 명령어 치환
- mkdir, cp: 기본 리눅스 명령어
2단계. 실행 권한 주기
chmod +x backup.sh
3단계. 테스트 실행하기
./backup.sh
실전 예제 5가지
1. 매일 자동 백업
#!/bin/bash
DATE=$(date +%F)
mkdir -p /backup/$DATE
cp -r /var/www/html /backup/$DATE
2. 로그 정리 스크립트
#!/bin/bash
find /var/log -name "*.log" -mtime +7 -exec rm -f {} \;
3. 서비스 상태 모니터링
#!/bin/bash
if systemctl is-active --quiet nginx; then
echo "nginx OK"
else
systemctl restart nginx
fi
4. 디스크 용량 경고 메일
#!/bin/bash
THRESHOLD=90
USAGE=$(df / | grep / | awk '{ print $5 }' | sed 's/%//')
if [ "$USAGE" -gt "$THRESHOLD" ]; then
echo "Disk usage critical: $USAGE%" | mail -s "Disk Alert" admin@example.com
fi
5. 시스템 정보 리포트
#!/bin/bash
HOST=$(hostname)
UPTIME=$(uptime -p)
MEMORY=$(free -m | grep Mem | awk '{print $3"MB / "$2"MB"}')
echo -e "Host: $HOST\nUptime: $UPTIME\nMemory: $MEMORY" > /tmp/sysreport.txt
crontab과의 연동으로 자동 실행
0 3 * * * /home/user/backup.sh >> /var/log/backup.log 2>&1
- 위 설정은 매일 새벽 3시에 자동 백업을 실행
지금 바로 crontab -e 명령어로 스크립트를 등록해보세요!
고급 팁: 인자 전달과 조건문 활용
#!/bin/bash
if [ $# -eq 0 ]; then
echo "사용법: $0 [파일명]"
exit 1
fi
FILE=$1
if [ -f "$FILE" ]; then
echo "$FILE 파일 존재함"
else
echo "$FILE 파일 없음"
fi
쉘 스크립트 vs Python 자동화 비교
항목 쉘 스크립트 Python
실행 환경 | 기본 포함 | 별도 설치 필요 |
간결성 | 짧고 빠름 | 구조적, 장황함 |
복잡한 로직 | 제한적 | 뛰어남 |
시스템 연동 | 강력함 | 중간 |
복잡한 연산은 Python, 시스템 자동화는 쉘 스크립트로 적절히 분리하세요!
FAQ: 쉘 스크립트 관련 질문들
Q1. 쉘 스크립트 실행이 안 돼요.
A: chmod +x script.sh로 실행 권한을 부여했는지 확인하세요.
Q2. crontab에서 환경변수가 다르게 작동해요.
A: 스크립트에 PATH, HOME 등을 명시적으로 선언하세요.
Q3. 쉘 스크립트 내 변수는 어떻게 선언하나요?
A: 변수명=값 형식이며, 참조 시 $변수명으로 사용합니다.
Q4. 에러 로그는 어디로 저장되나요?
A: 2>&1을 통해 표준 에러를 로그 파일로 리디렉션하세요.
Q5. GUI에서 쉘 스크립트 자동화 가능한가요?
A: GNOME Schedule 등 GUI 기반 크론 관리 툴을 사용할 수 있습니다.
마무리하며
리눅스에서 업무를 자동화하고 효율을 극대화하려면 쉘 스크립트는 반드시 익혀야 할 기술입니다. 위 예제와 방법들을 실제 업무에 적용하면 시간과 자원을 절약할 수 있으며, 안정적인 운영 환경을 유지할 수 있습니다.
📌 지금 바로 간단한 스크립트를 하나 작성해보고, crontab에 연동해보세요!
📍 이후엔 systemd 서비스 등록, logrotate 연동 등도 함께 배워보면 좋습니다.
📌 쉘 자동화, crontab, logrotate 글은 본 블로그에서 계속 업데이트되니 구독 잊지 마세요!
'[개취] 초보 리눅스 이야기' 카테고리의 다른 글
리눅스 systemd 서비스 유닛 만들기 완전 정복! – 나만의 서비스 등록과 자동 실행 가이드 (1) | 2025.07.01 |
---|---|
HDD·SSD 데이터 보호 필수! RAID 종류 완벽 정리|RAID 0, 1, 5, 6, 10 차이점 한눈에 보기 (0) | 2025.06.30 |
리눅스 crontab 완전 정복! 자동화 스케줄링으로 업무 효율 UP (1) | 2025.06.28 |
systemd vs SysVinit 완전 정복! 리눅스 초기화 시스템 비교 분석 (0) | 2025.06.27 |
가상화 OS 완벽 가이드! 한 대의 컴퓨터로 여러 운영체제를 자유롭게 사용하는 법 (2) | 2025.06.25 |
댓글