Shell의 기초와 실행 모드
Shell은 사용자가 운영체제 커널과 상호작용하는 인터페이스로, 명령어 처리 및 스크립트 작성 기능을 제공한다. 주로 bash가 리눅스 환경에서 기본으로 사용되는 쉘이다.
실행 방식
- 인터랙티브 모드: 터미널에서 직접 명령어를 입력하고 즉각적인 결과를 확인하는 방식.
- 비인터랙티브 모드: 스크립트 파일을 실행하여 일련의 명령어를 자동으로 처리하는 방식.
스크립트 시작선
#!/usr/bin/env bash
이 구문은 스크립트가 어떤 쉘로 실행될지를 지정한다. /usr/bin/env 방식은 시스템의 PATH 환경 변수를 기반으로 쉘을 찾기 때문에 더 유연하고 신뢰할 수 있다.
기본 문법
주석
# 단일 줄 주석
:<<EOF
여러 줄 주석
여러 줄 주석
EOF
</code>
출력 명령어
echo는 문자열 출력에 사용되며, -e 옵션을 통해 이스케이프 문자를 해석할 수 있다.
echo "Hello World"
echo -e "Line1\nLine2" # 줄바꿈 적용
echo -e "YES\cNO" # 줄바꿈 없음
포맷팅 출력
printf는 정밀한 포맷팅을 가능하게 한다.
printf "%-10s %-8s %.2f\n" 이름 성별 체중
변수 및 데이터 타입
Bash는 강력한 타입 시스템 없이 동적으로 변수를 관리한다.
변수 선언 및 접근
name="Alice"
echo "${name}" # 권장: 중괄호 사용
특수 변수
| 변수 | 설명 |
|---|---|
$HOME | 사용자 홈 디렉터리 |
$PATH | 실행 파일 검색 경로 |
$RANDOM | 0~32767 사이의 난수 |
$UID | 사용자 고유 ID |
문자열 조작
길이 및 추출
text="hello"
echo ${#text} # 길이: 5
echo ${text:1:3} # 인덱스 1부터 3글자 추출: "ell"
하위 문자열 검색
result=$(expr index "$text" "ll")
echo $result # 3 (ll의 위치)
배열 처리
Bash는 1차원 배열만 지원하며, 인덱스는 0부터 시작한다.
배열 생성 및 접근
colors=(red green blue)
echo ${colors[1]} # green
echo ${colors[*]} # red green blue
echo ${colors[@]} # red green blue
배열 요소 추가 및 삭제
colors+=(yellow black) # 추가
unset colors[1] # 삭제
연산자
산술 연산
result=$(( 10 + 5 * 3 ))
echo $result # 25
조건 비교
if [[ $x -eq 10 ]]; then
echo "같다"
fi
파일 속성 확인
if [[ -f /etc/passwd ]]; then
echo "파일 존재"
fi
제어 구조
조건문
if [[ $age -ge 18 ]]; then
echo "성인"
elif [[ $age -ge 13 ]]; then
echo "청소년"
else
echo "아동"
fi
반복문
for i in {1..5}; do
echo $i
done
while [[ $count -lt 10 ]]; do
echo $count
count=$((count + 1))
done
함수 정의
calculate() {
local a=$1
local b=$2
local op=$3
case $op in
"+") return $(($a + $b)) ;;
"-") return $(($a - $b)) ;;
*) return 0 ;;
esac
}
calculate 5 3 "+"
echo $? # 반환값 출력
확장 및 리디렉션
명령 확장
current_time=$(date +%H:%M:%S)
echo $current_time
표준 입출력 리디렉션
ls > file_list.txt # 출력 저장
grep error log.txt 2>&1 # 오류도 표준 출력으로 전달
디버깅 방법
스크립트 실행 시 디버그 모드를 활성화하면 각 명령어의 실행 과정을 확인할 수 있다.
#!/bin/bash -x
echo "Debug mode enabled"