0. 들어가기 전에... 쉘 프로그래밍 맛보기!😋
✏️ls 명령어 텍스트를 메모장에 쓰고. vi test.sh (내용: ls)


✏️ 메모장에 권한을 주고 chmod 755 test.sh

✏️실행하면 ./test.sh

~~따란🎉 ls 명령이 실행된 결과가 뜸 ~~
쉘 프로그래밍 Shell Programming
리눅스의 명령어를 최대한 활용방법으로 리눅스 명령어로 프로그래밍을 하는 것이다.
쉘 프로그램은 기본적으로 시스템 명령어와 프로그래밍 구문으로 이루어져 있다.
⭐쉘 프로그래밍은 반복적인 작업을 자동화 할 수 있다. 이를 도커에서 활용할 수 있다. (참고 목차⌨️실전 예제 1)
1️⃣ 스크립트 실행 방법
맛보기에서 봤던 것처럼 쉘 스크립트 파일을 만들고 실행하는 방법!!
| 방법 | 설명 | 명령어 |
|---|---|---|
| 절대경로 | 파일의 절대경로를 그대로 입력해서 실행 | [파일의 절대경로] |
sh 명령어 사용 |
쉘을 직접 실행해서 파일 실행 | sh [파일이름] |
| 실행 권한 주기 | 실행 파일처럼 직접 실행 | chmod 755 [파일이름]./[파일이름] |
2️⃣ 변수
변수명=값
(1) 환경 변수
- 시스템 환경 정보를 저장하는 변수
- 대문자로 되어 있음
예시 설명 PATH실행 파일 검색 경로 PS1프롬프트 표시 형식
(2) 사용자 정의 변수
- 사용자가 직접 작성한 변수
- 첫 글자는 문자나
_로 시작해야 함
(3) 특수 변수
- 쉘에서 제공하는 특별한 변수
- 예시: 현재 쉘의 PID, 마지막 명령어의 프로세스 번호 등
(4) 위치 매개변수
쉘 스크립트 실행 시 전달받는 인자들
$0 = 스크립트 이름
$1 ~ $9 = 첫 번째 ~ 아홉 번째 인자
(5) 변수 사용법
test=Hello
echo $test
[실습1]


[실습2]


3️⃣ 조건문 (if 문)
(1) 기본 if 문
if [ 조건 ]
then
수행 명령어
fi
(2) 조건 종류
문자열 검사
| 조건식 | 설명 |
|---|---|
str1 = str2 |
같으면 true |
str1 != str2 |
다르면 true |
-n str |
비어있지 않으면 true |
산술 비교
| 조건식 | 설명 |
|---|---|
| A -eq B | 같으면 true |
| A -ne B | 다르면 true |
| A -gt B | A가 B보다 크면 true |
파일 검사
| 조건식 | 설명 |
|---|---|
| -d file | 디렉토리 |
| -f file | 일반 파일 |
| -r file | 읽기 가능 |
논리 연산
| 연산자 | 설명 |
|---|---|
! |
NOT |
-a |
AND |
-o |
OR |
(3) if ~ else
if [ 조건 ]
then
명령어1
else
명령어2
fi
[실습]


(4) elif
if [ 조건1 ]
then
명령어1
elif [ 조건2 ]
then
명령어2
else
명령어3
fi
(5) case 문
case "$변수" in
'red')
echo "Color is Red"
;;
'blue' | 'sky')
echo "Color is Blue"
;;
*)
echo "NONE"
;;
esac
4️⃣ 사용자 입력 받기
read 변수명
5️⃣ 반복문
(1) for 문
for 변수 in 값들
do
명령어
done
[실습]
#!/bin/bash
for i in 1 2 3 4 5
do
echo $i
done
for i in $(seq 1 10)
do
echo $i
done
cnt=1
while [ $cnt -le 5 ]
do
echo $cnt
(( cnt ++ ))
done
(2) while 문
while [ 조건 ]
do
명령어
done
예시
#!/bin/bash
var=5
while [ $var -lt 10 ]
do
echo $var
var=`expr $var \+ 1`
done
6️⃣ 내부 명령어
| 명령어 | 설명 |
|---|---|
exit |
쉘 스크립트 종료 |
continue |
반복문 내에서 현재 진행중인 작업 중단하고 반복문 처음으로 이동 |
break |
반복문을 종료. done 다음 명령어 실행 |
return |
함수 종료 및 결과 값 반환 |
expr |
수식의 결과 출력 |
read |
표준 입력에서 입력 받아 변수에 할당 |
✅ 실습 예제: 1부터 10까지, 5가 되면 멈추기
#!/bin/bash
var=0
while [ $var -le 10 ]
do
var=`expr $var \+ 1`
if [ $var -eq 5 ]
then
break
fi
echo $var
done
7️⃣ 명령어 활용법
| 명령어 | 설명 |
|---|---|
cut |
-d로 구분자 지정, -f로 필드 지정 |
awk |
-F로 구분자 지정 후 출력 제어 |
wc |
-c 문자 수, -l 라인 수 |
sed |
-i로 파일에 바로 적용 |
1) cut 명령어
필드 단위로 텍스트를 분리하거나 특정 필드만 추출할 때 사용한다. 주로 구분자가 있는 데이터 파일(CSV, TSV 등)을 다룰 때 유용하다.
- -d : 구분자를 지정한다.
- -f : 몇 번째 필드를 추출할지 지정한다.
예시:
cut -d: -f1 /etc/passwd
:를 기준으로 첫 번째 필드를 출력한다. 위 명령어는 시스템 사용자 계정 목록을 추출할 때 많이 사용한다.
2) awk 명령어
텍스트 라인에서 특정 패턴을 검색하거나 필드를 기준으로 데이터를 추출하고 가공할 때 사용한다.
- -F : 필드 구분자를 지정한다.
- {print $1} : 첫 번째 필드를 출력한다.
예시:
awk -F: '{print $1}' /etc/passwd
:를 기준으로 필드를 나누고 첫 번째 필드를 출력한다. cut 명령어보다 조건 처리나 패턴 매칭이 더 강력하다.
3) wc 명령어
파일의 라인 수, 단어 수, 문자 수 등을 계산할 때 사용한다.
- -c : 문자의 수를 출력한다.
- -l : 라인 수를 출력한다.
예시:
wc -l sample.txt
sample.txt 파일의 총 라인 수를 출력한다. 로그 파일 라인 수를 확인할 때 자주 사용한다.
4) sed 명령어
파일의 텍스트를 편집하거나 특정 패턴을 찾아서 수정, 삭제할 때 사용한다.
- -i : 변경 내용을 파일에 바로 저장한다. 옵션을 주지 않으면 변경된 결과만 출력하고 파일 내용은 바뀌지 않는다.
자주 쓰는 패턴
sed 's/[패턴1]/[패턴2]/g' 파일
⬆️패턴1을 패턴2로 전부 변경한다.
sed '/[패턴]/d' 파일
⬆️지정한 패턴이 포함된 라인을 삭제한다.
sed '/^$/d' 파일
⬆️공백 라인을 삭제한다. 파일 정리할 때 특히 유용하다.
예시
#!/bin/bash
total=`df -h | grep centos | cut -d" " -f4`
avail=`df -h | grep centos | awk -F" " '{print $4}'`
echo "Total Size is $total"
echo "Avail Size is $avail"
8️⃣ 함수
(1) 기본 형태
function 함수이름() {
명령어들
}
함수이름
(2) 지역 변수 사용
#!/bin/bash
var=1234
function test() {
local var=5678
echo "local variable is $var"
}
echo "before variable is $var"
test
echo "after variable is $var"
(3) 매개변수 전달
#!/bin/bash
function test() {
local var=$1
echo "$var"
}
test 1234
(4) 결과값 반환
#!/bin/bash
function test() {
return 10
}
test
result=$?
echo $result
⌨️실전 예제 1
👩🏻🏫만약에 사용량이 70% 이상이면 ‘큰일이다’를 출력하는 쉘 프로그램 작성하기.

#!/bin/bash
total=`free | grep Mem | awk '{ print $2 }'`
used=`free | grep Mem | awk '{ print $3 }'`
result=$(($used * 100 / $total ))
echo $result
if [ $result -ge 70 ]
then
echo "큰일이다!!!"
fi
⌨️실전 예제 2
#!/bin/bash
i=0
flag=0
total=0
for test in `awk -F"," '{print $4 "-" $8}' 2020 | awk -F"-" '{print $1 " " $3}'`
do
i=`expr $i + 1`
if [ $flag = 1 ]
then
echo $test
total=`expr $total + $test`
flag=0
fi
if [ `expr $i % 3` = 1 -a $test -ge 20 -a $test -lt 30 ]
then
echo "age is $test"
flag=1
fi
if [ `expr $i % 3` = 0 ]
then
continue
fi
done
echo "======================"
echo "Total is $total"
echo "======================"'BEYOND SW [4] DevOps' 카테고리의 다른 글
| [k8s] 쿠버네티스(Kubernetes)란 무엇인가? (2) | 2025.03.14 |
|---|---|
| [k8s] 실습 ① ubuntu서버에 containerd 준비하기 (3) | 2025.03.14 |
| [Docker] 2일차 - 도커 네트워크의 이해 실습 (2) | 2025.03.12 |
| [Docker] 2일차 - Dockerfile 작성부터 이미지 배포까지 (1) | 2025.03.12 |
| [Docker] 1일차 실습 - docker-compose.yml + 설정 문법 (0) | 2025.03.12 |