LINUX/리눅스 쉘 스크립트 바이블 정리

[리눅스 바이블] 11. 스크립트 구축의 기초

은재정 2022. 2. 27. 23:18

여러 명령 사용하기

두 개의 명령을 함께 실행하고 싶다면 같은 프롬프트 라인에 세미콜론(;)으로 둘을 구분하여 입력한다.

 

스크립트 파일 만들기

쉘 스크립트 파일을 만들 때에는 파일의 첫 번째 줄에 사용하고 있는 쉘을 지정해야 한다. 

#!/bin/bash
date
whoami

 

보통의 쉘 스크립트 라인에서 #은 주석으로 사용되지만, 첫 번째 줄은 # 기호 다음에 느낌표를 쓰면 쉘에게

이 스크립트가 어떤 쉘에서 실행되는지를 알려준다.

 

스크립트 파일을 실행하기 위해서는 PATH 환경변수안에 있는 쉘 스크립트 파일이 있는 디렉토리를 추가하거나,

프롬프트에서 쉘 스크립트 파일의 절대/상대 경로를 명시해야 한다.

 

또한 쉘이 쉘 스크립트 파일을 실행하기 위해서는 실행권한을 줘야하는데,

주로 chmod 명령을 사용한다. (chmod u+x ./test1.sh)

 

메시지 표시하기

쉘 스크립트 사용자가 스크립트 안에서 무슨 일이 일어나고 있는지 알 수 있도록 echo 명령을 사용한다.

echo 명령은 텍스트 문자열을 묶기 위해서 ' 또는 "를 사용한다.

 

echo 명령은 기본적으로 newline을 추가하는데, 그게 싫다면 -n 옵션을 추가하면 된다.

 

변수 사용하기

환경 변수

$ 표시를 통해 환경 변수를 출력할 수 있는데, $를 그대로 출력하고 싶다면 \를 통해 escape 한다.

# 5 출력
echo "The cost is $15"
echo "The cost is \$15"

 

사용자 변수

사용자 변수는 등호를 통해 할당하는데 변수, 등호, 값 사이에는 빈 칸을 둘 수 없다.

시스템 변수와 마찬가지로 사용자 변수도 달러 기호를 사용하여 참조할 수 있다.

 

명령 치환하기

쉘 스크립트의 유용한 기능 중 하나는 명령의 출력으로부터 정보를 추출하고 이를 변수에 할당할 수 있는 기능이다.

명령의 출력을 변수에 지정하는 방법에는 두 가지가 있다.

 

1. 역따옴표 문자(`)

2. $() 형식

 

#!/bin/bash
today=$(date +%Y%m%d)
ls /usr/bin -al > log.$today

 

입력과 출력 리다이렉트 하기

출력 리다이렉트하기

리다이렉트의 가장 기본적인 형태는 파일 명령의 출력을 전송한다. bash 쉘은 이를 위해 > 부등호 기호를 사용한다.

command > outputfile

 

출력을 덧붙이기 위해서는 부등호를 두 번 사용한다. (>>)

 

입력 리다이렉트하기

입력 리다이렉트는 출력 리다이렉트의 반대로, 파일의 내용을 받아서 명령으로 보낸다.

command < inputfile

 

인라인 입력 리다이렉트는 부등호를 두 번 사용한다. (<<) 이 기호 이외에도 입력에 쓸 데이터의 시작과 끝을

지정하는 텍스트 마커를 정해야 하는데, 텍스트 마커는 어떤 문자열 값이든 사용할 수 있지만 데이터 시작과 끝이 똑같아야 한다.

 

command << marker

data

marker

 

파이프

파이프는 명령의 출력을 파일에 리다이렉트하는 대신 출력을 다신 명령의 stdin으로 리다이렉트하는 과정이다.

command1 | command2 형식으로 사용한다.

 

계산하기

expr 명령

expr 명령을 통해 쉘 스크립트에서 수학 연산을 수행할 수 있다.

# 오류
expr 5 * 2
# * escaping
expr 5 \* 2

 

대괄호 사용하기

expr 명령말고도 대괄호를 사용해서 bash 쉘에서 계산할 수 있다.

var1=$[1 + 5]
echo $var1
# escape 안해도 됨
var2=$[$var1 * 2]
echo $var2

 

다만 bash 쉘 수학 연산은 정수 연산만 지원한다는 큰 제약이 존재한다.

 

실수 계산하기

bc 기초

bc는 내장된 bash 계산기이다. bc는 숫자, 변수, 주석, 수식, 프로그래밍문, 함수 모두를 인식한다.

bc
12 * 5.4
3.16 * 4.8
# 0 출력
3.44 / 5
# 원하는 소수점 이하 자릿수 설정
scale=4
3.44 / 5
# 변수 설정 가능
var1=10
var1 * 4
var2=var1/5
print var2
quit

 

스크립트에서 bc 사용하기

파이프를 사용해서 스크립트에서 bc를 사용할 수 있다.

#!/bin/bash
var1=$(echo "scale=4; 3.44 / 5" | bc)
echo "The answer is $var1"

 

또는 커맨드라인에서 직접 데이터를 리다이렉트 할 수 있다.

var=$(bc << EOF
scale=4
a=10
b=20
c=a/b
print c
EOF)
echo $var

 

스크립트 종료하기

쉘에서 실행되는 모든 명령은 쉘에 처리가 끝났음을 알려주는 종료 상태(exit status)를 사용한다. 종료 상태는

명령 실행이 완료되면 0-255 사이의 정수 값을 명령으로부터 쉘로 전달한다.

 

리눅스는 마지막으로 실행된 명령의 종료 상태 값을 보관하는 특별한 변수인 $? 변수를 제공한다.

관례에 따라 성공적으로 완료된 명령의 종료 상태는 0이며, 명령이 오류를 내고 완료되면 양의 정수 값이 종료 상태에 저장된다.

 

exit 명령

exit 명령은 스크립트가 종료될 때 종료 상태를 지정할 수 있다. 스크립트의 종료 상태를 확인하면

exit 명령의 매개변수로 사용되는 값을 얻게 된다.

 

종료 상태 코드는 255까지 쓸 수 있기 때문에 쉘은 modulo 연산을 통해 256으로 나눈 나머지를 반환한다.