**쉘 스크립트(Shell Script)**는 리눅스나 유닉스 시스템에서 명령어들을 자동으로 실행하기 위해 작성한 텍스트 파일입니다.
즉, 여러 개의 명령을 하나의 파일에 저장해 순차적으로 실행함으로써, 반복 작업이나 시스템 관리 작업을 자동화할 수 있습니다.
쉘(Shell): 사용자가 입력한 명령을 해석해 커널에 전달하는 인터프리터.
스크립트(Script): 명령어를 모아놓은 실행 가능한 텍스트 파일.
|
항목 |
설명 |
|---|---|
|
파일형태 |
일반 텍스트 파일 (.sh 확장자 사용 권장) |
|
실행방식 |
인터프리터 방식 (컴파일 불필요) |
|
사용목적 |
시스템 관리, 자동 백업, 로그 처리, 배포 자동화 등 |
|
실행환경 |
bash, sh, zsh 등 다양한 쉘에서 실행 가능 |
쉘 스크립트 파일의 기본적인 형태는 다음과 같습니다.
#!/bin/bash
# 주석: 이 스크립트는 간단한 예시입니다.
echo "Hello, Shell Script"
#!/bin/bash: shebang이라 부르며, 해당 스크립트를 해석할 쉘 프로그램을 지정합니다.
#: 주석 표시.
echo: 문자열을 출력하는 명령.
nano hello.sh
내용 예시:
#!/bin/bash
echo "Hello Linux"
chmod +x hello.sh
./hello.sh
또는 직접 쉘로 실행:
bash hello.sh
쉘 스크립트에서는 변수를 다음과 같이 사용할 수 있습니다.
#!/bin/bash
name="User"
echo "Hello, $name"
변수 선언 시 = 앞뒤에 공백이 없어야 합니다.
변수 값을 참조할 때 $변수명 형태로 사용합니다.
#!/bin/bash
echo "이름을 입력하세요:"
read name
echo "안녕하세요, $name 님"
read 명령어는 사용자 입력을 받습니다.
#!/bin/bash
echo "숫자를 입력하세요:"
read num
if [ $num -gt 10 ]; then
echo "10보다 큽니다."
else
echo "10 이하입니다."
fi
[ ] 안에는 조건식을 넣습니다.
-gt, -lt, -eq 등은 비교 연산자입니다.
for i in 1 2 3 4 5
do
echo "숫자: $i"
done
count=1
while [ $count -le 5 ]
do
echo "현재 값: $count"
((count++))
done
#!/bin/bash
greet() {
echo "안녕하세요, $1 님"
}
greet "홍길동"
$1, $2는 함수에 전달된 인수(argument)를 나타냅니다.
모든 명령은 **종료 상태(exit code)**를 반환합니다.
0: 성공
0이 아님: 오류 발생
확인 예시:
ls /etc
echo $? # 0 출력
ls /없는폴더
echo $? # 2 출력
#!/bin/bash
LOG_DIR="/var/log"
BACKUP_DIR="/backup/logs"
DATE=$(date +%Y%m%d)
mkdir -p $BACKUP_DIR
tar -czf $BACKUP_DIR/logs_$DATE.tar.gz $LOG_DIR
echo "로그 백업 완료: $BACKUP_DIR/logs_$DATE.tar.gz"
반복되는 관리 작업 자동화
배치 처리(batch processing)
서버 유지보수 간소화
시스템 관리 효율 극대화
|
명령어 |
설명 |
|---|---|
|
echo |
출력 |
|
read |
사용자 입력 |
|
if, for, while |
제어문 |
|
test, [ ] |
조건 평가 |
|
exit |
스크립트 종료 |
|
$? |
이전 명령의 종료 코드 |
|
$$#=##;, $@ |
인수 개수 및 목록 |
파일 인코딩은 UTF-8로 저장해야 한글이 깨지지 않습니다.
#!/bin/bash를 꼭 첫 줄에 작성해야 합니다.
실행 권한을 부여하지 않으면 실행되지 않습니다. (chmod +x)