
여러 명령 사용하기
두 개의 명령을 함께 실행하고 싶다면 같은 프롬프트 라인에 세미콜론(;)으로 둘을 구분하여 입력한다.
스크립트 파일 만들기
쉘 스크립트 파일을 만들 때에는 파일의 첫 번째 줄에 사용하고 있는 쉘을 지정해야 한다.
#!/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으로 나눈 나머지를 반환한다.
'LINUX > 리눅스 쉘 스크립트 바이블 정리' 카테고리의 다른 글
| [리눅스 바이블] 13. 반복문 사용하기 (0) | 2022.03.14 |
|---|---|
| [리눅스 바이블] 12. 조건문 사용하기 (0) | 2022.03.03 |
| [리눅스 바이블] 8. 파일시스템 관리하기 (0) | 2022.02.26 |
| [리눅스 바이블] 7. 리눅스 파일 사용 권한 이해하기 (0) | 2022.02.09 |
| [리눅스 바이블] 6. 리눅스 환경 변수 사용하기 (0) | 2022.02.06 |