
Bash 스크립트란?
Bash 스크립트는 리눅스에서 자주 사용하는 명령어들을 파일로 저장해두고, 해당 파일을 실행하여 자동화하는 방식이다.
보통 .sh 확장자를 사용하지만 필수는 아니다. 그 이유는 리눅스에서는 파일 확장자 자체가 의미를 가지지는 않기 때문이다.
Bash 스크립트를 사용하는 이유
복잡하거나 반복적인 명령어 작업을 손쉽게 자동화할 수 있기 때문이다. 예를 들어 아래와 같은 3줄의 명령어를 매번 수동으로 입력하는 대신
#!/bin/bash
echo "백업을 시작합니다..."
cp -r /home/user/data /home/user/backup
echo "백업이 완료되었습니다!"
위 코드를 backup.sh에 담아 ./backup.sh만 실행하면 동일한 결과를 얻을 수 있다.
프로그램 실행과 프로세스
프로그램을 실행한다는 것은 해당 프로그램을 메모리에 복사하여 독립적인 프로세스로 만드는 것이다. 이 복사된 실행 인스턴스를 "프로세스"라 부른다.
여러 개의 같은 프로그램을 실행하면?
각각 독립적인 프로세스가 생성된다. 예를 들어:
터미널 1: cp a.txt b.txt
터미널 2: cp c.txt d.txt
이 경우 cp라는 명령이 2개의 서로 다른 프로세스로 실행된다.
터미널과 Bash
터미널을 열면 Bash 프로세스가 하나 생성되며, 사용자로부터 명령어를 입력받는 쉘 역할을 수행한다. ./myscript.sh처럼 스크립트를 실행하는 경우, 현재 Bash에서 새로운 프로세스가 생성되어 해당 스크립트가 실행된다.
$PATH 환경변수 ?
PATH는 쉘이 명령어를 실행할때, 어디에서 그 실행 파일을 찾을지를 알려주는 디렉토리의 목록이다.
PATH에 없다면, 실행이 안된다.
예를 들어, 우리가 myscript.sh를 그냥 실행하면 실행이 안된다.
현재 디렉토리(.) 는 보통 PATH에 포함되지 않기 때문이다.
ls, cp 같은 명령어들이 동작하는 이유는 이들이 $PATH에 포함된 디렉토리에 있기 때문이다.
현재 디렉토리인 .는 기본적으로 포함되어 있지 않기 때문에 현재 디렉토리에 아래에 있는 스크립트 파일을 바로 hello.sh
실행을 할 수 없다.
./hello.sh처럼 현 명시적으로 경로를 지정해야 실행할 수 있다.
실행하기 전 : 실행 권한 부여
스크립트를 처음 만들었을 때는 실행 권한이 없기 때문에 아래 명령어를 통해 권한을 부여해야 한다:
chmod +x script.sh
Shebang (#!) - script 첫 줄에 bin/bash 주입
스크립트 파일의 첫 줄에 어떤 인터프리터로 실행할지 명시하는 선언이다.
#!/bin/bash
이렇게 선언해야 Bash 환경에서 해당 스크립트가 실행된다.
Bash 변수 문법
변수 선언
변수를 선언할 때는 공백 없이 작성하며, $ 기호 없이 이름만 사용한다.
name="Alice"
변수 참조
변수 값을 사용할 때는 $ 기호를 붙인다.
echo $name
따옴표의 차이
- 큰따옴표 "는 변수 해석을 수행한다.
- 작은따옴표 '는 변수 해석을 하지 않는다.
var="World"
echo "Hello $var" # Hello World
echo 'Hello $var' # Hello $var
명령어 결과를 변수에 담기
명령어의 실행 결과를 변수에 담고 싶을 때는 $(명령어) 형식을 사용한다.
files=$(ls /etc)
변수 Export
export를 사용하면 해당 변수를 현재 Bash의 자식 프로세스에서도 사용할 수 있게 된다. 하지만 이미 선언된 변수에는 영향을 주지 않는다.
export MYVAR="data"
수치 연산 $((a + b))
수 연산을 수행할 때는 $(( )) 구문을 사용한다.
a=5
b=3
sum=$((a + b))
echo $sum # 8
조건문 if
if [ 조건문 ]; then
실행문
fi
- [] 안에는 공백을 꼭 넣어야 한다. [조건문] (X), [ 조건문 ] (O)
- 비교 연산자로는 -eq, -ne, -gt, -lt, -ge, -le 등이 있다.
if [ "$1" -gt 100 ]; then
echo "100보다 큽니다."
fi
test 명령어 + $? 결과값
test 명령은 [ 조건 ]과 동일한 기능을 한다.
$?는 바로 직전의 test 조건문을 실행시키는 것.
test 1 -gt 100
echo $?
- 결과가 0이면 true (성공)
- 결과가 1이면 false (실패)
리눅스에서는 다른 프로그래밍언어와 다른 AGAINST!!!
이는 다른 프로그래밍 언어와는 반대로, 리눅스에서는 0이 참, 1이 거짓을 의미한다.
조건문 확장: elif, else
if [ 조건 ]; then
실행문
elif [ 조건 ]; then
다른 실행문
else
나머지 실행문
fi
정적 매개변수 변수들
- $0 : 스크립트 파일 이름
- $1, $2, ... : 첫 번째, 두 번째 매개변수
- $# : 입력받을때의 매개변수의 개수
'Linux' 카테고리의 다른 글
| LINUX : OWNERSHIP + PERMISSION (0) | 2025.04.20 |
|---|---|
| LINUX : SSH (0) | 2025.04.20 |
| LINUX : SEVERAL UTILITY COMMANDS (0) | 2025.04.20 |
| LINUX : SUPERUSER + HIDDEN FILE (0) | 2025.04.20 |
| LINUX : PIPING OPERATOR (0) | 2025.04.20 |