쉘 스크립트

알파카파카·2025년 7월 17일

1. 변수 선언과 출력

name="홍길동"	# 변수 선언 ( 변수명과 = 사이에 공백이 없어야 함 )
echo "안녕하세요, $name 님!"  # 변수 참조 시 $를 사용

환경 변수로 선언하려면 export를 사용

export MY_VAR="쉘 스크립트"

2. 조건문

2.1 if-else 조건문

파일 존재 여부 확인

if [ -e "myfile.txt" ]; then
  echo "파일이 존재합니다."
else
  echo "파일이 존재하지 않습니다."
fi

주요 조건 연산자

연산자설명예시
-e파일이 존재하는지[ -e "파일명" ]
-d디렉토리인지[ -d "디렉토리명" ]
-f일반 파일인지[ -f "파일명" ]
-z문자열이 비었는지[ -z "$STRING" ]
=문자열 비교[ "str1"="str1" = "str2" ]
-eq숫자 값이 같은지[ "num1"eq"num1" -eq "num2" ]
-lt숫자 값이 작은지[ "num1"lt"num1" -lt "num2" ]

2.2 case 조건문

read -p "계절을 입력하세요: " season		

case $season in
  봄)
    echo "꽃이 피는 계절입니다." ;;
  여름)
    echo "더운 계절입니다." ;;
  *)
    echo "알 수 없는 계절입니다." ;;
esac

3. 반복문

3.1 for 반복문

리스트 반복

for item in "사과" "바나나" "포도"; do
  echo "과일: $item"
done

특정 숫자 범위 반복

for i in {1..5}; do
  echo "숫자: $i"
done

3.2 while 반복문

count=1
while [ $count -le 5 ]; do
  echo "숫자: $count"
  count=$((count + 1))
done

3.3 until 반복문

count=1
until [ $count -gt 5 ]; do
  echo "숫자: $count"
  count=$((count + 1))
done

4. 함수

4.1 함수 정의

greet() {
  echo "안녕하세요, $1 님!" # $1: 첫 번째 매개변수
}

4.2 함수 호출

greet "홍길동"

4.3 반환값 처리

return으로 값을 반환하고, 함수 호출 시 $?로 결과를 얻기

add() {
  return $(( $1 + $2 ))
}
		
add 3 5
echo $?  # 결과: 8

5. 파일 및 디렉토리 제어

5.1 파일 입력 읽기

while과 read 명령어로 파일 내용을 한 줄씩 읽기
파일 라인 한 줄씩 읽어서 처리

while read line; do
  echo "라인 내용: $line"
done < "myfile.txt"

5.2 파일 쓰기

스크립트에서 파일에 데이터를 기록
새 파일 생성 후 쓰기

echo "첫 번째 줄입니다." > output.txt

기존 파일에 추가
echo "두 번째 줄입니다." >> output.txt

5.3 파일 존재 여부

특정 파일이나 디렉토리의 존재 여부를 확인

file="test.txt"
if [ -f "$file" ]; then
  echo "파일이 존재합니다."
else
  echo "파일이 없습니다."
fi

6. 문자열 처리

6.1 문자열 길이

쉘 스크립트에서 문자열 길이를 구하려면 ${#변수}를 사용

str="안녕하세요"
echo ${#str}  # 출력: 5

6.2 문자열 부분 추출

부분 문자열을 추출하려면 ${변수:시작:길이} 문법을 사용 ( 뭔가 파이썬 같음 )

str="안녕하세요"
echo ${str:0:2}   # "안녕"
echo ${str:(-2)}  # 뒤에서 2글자 출력: "하세요"

6.3 문자열 치환

문자열의 특정 부분을 바꾸기

str="abc123abc"
echo ${str/123/456}   # 첫 번째 "123" 치환: abc456abc
echo ${str//abc/XYZ}  # 모든 "abc" 치환: XYZ123XYZ

7. 배열

배열 선언

fruits=("사과" "바나나" "포도")

배열 요소 출력

echo ${fruits[0]}  # "사과"
echo ${fruits[@]}  # 전체 요소

배열 순회

배열의 모든 요소를 순회하려면 for 문 사용

for fruit in "${fruits[@]}"; do
		  echo "$fruit"
		done

8. 산술 연산

쉘 스크립트에서 산술 연산은 $(( )) 문법을 사용

a=7
b=3
echo "덧셈: $((a + b))"  # 덧셈: 10
echo "뺄셈: $((a - b))"  # 뺄셈: 4
echo "곱셈: $((a * b))"  # 곱셈: 21
echo "나눗셈: $((a / b))"  # 나눗셈: 2
echo "나머지: $((a % b))"  # 나머지: 2

참고 : expr 명령을 사용하여 실행 가능

9. 입출력 및 에러 처리

표준 출력과 에러 리다이렉션
스크립트를 작성할 때 출력과 에러를 각각 관리하려면 리다이렉션을 사용

echo "정상 출력" > output.log    # 출력 파일 저장
ls nonexistent_file 2> error.log # 에러 파일 저장

명령어 연결
&&와 ||를 사용하여 명령어를 연결할 수 있습니다.

ls myfile.txt && echo "파일 있음" || echo "파일 없음"

10. 프로세스 관리

쉘 스크립트로 실행되는 프로세스를 제어하거나 확인할 수 있습니다.

백그라운드 실행

작업을 백그라운드에서 실행하려면 &를 사용합니다.

./long_task.sh &

프로세스 상태 확인

ps 명령으로 현재 실행 중인 프로세스를 확인합니다.

ps -ef | grep process_name
profile
타닥,,, 타다닥,,,,,,,

0개의 댓글