Linux

LINUX : BASH SCRIPT

Frisbeen 2025. 4. 20. 22:05

HARVARD AGAINST TRUMP

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