Shell Script
2023. 3. 26. 21:34ㆍetc/IT 상식
Unix/Linux 환경에서 커맨드를 실행하도록 작성한 스크립트이다. 조건 설정, 파일 입출력, 로그 파일 작성 등을 할 수 있다.
기본 설정
#!/bin/sh
echo "Hello, World!!"
- 쉘 스크립트 파일은 기본적으로
.sh
확장자로 작성한다. - 실제 코드를 작성하기 전 맨 처음 행에는
#!/bin/sh
를 작성한다. 시스템에 지금부터 쉘 스크립트를 실행한다는 사실을 알리기 위해서다. 만약 기본 쉘이 아니라 커스텀한 쉘을 사용하는 경우 경로를 해당 쉘의 경로로 작성해야 한다. - 코드를 실행하는 방법은 다음과 같다.
// 먼저 실행 권한을 준다.
$ chmod 755 test.sh
$ ./test.sh
$ sh test.sh
$ bash test.sh
기본 커맨드
주석
#
으로 주석 처리할 수 있다.
#!/bin/sh
# 주석 1
# 주석 2
echo "Hello, World!!"
입출력
echo로 출력, read로 입력한다.
#!/bin/sh
read NAME
echo "Hello, $NAME!!"
$ ./test.sh
Adam
Hello, Adam!!
⚠️ 입력을 대기하고 있는 경우 스크립트는 실행되지 않는다.
변수
- 이름으로 영문자, 숫자, 언더바를 사용할 수 있다.
- 변수에 값을 할당할 때는
=
을 사용하고 앞뒤 공백없이 작성한다. 문자열인 경우 쌍따옴표(”)로 감싼다. - 변수에 접근할 때는
$변수명
으로 한다. 또는${변수명}
으로도 가능하다. - 하나의 변수에 한 개의 값만 저장한다.
- 상수를 만드려면
readonly
키워드를 사용한다. unset
으로 변수를 지울 수 있다(readonly
변수는 삭제하지 못한다).
#!/bin/sh
var="변수1"
VaR_2="변수2"
echo "VaR_2=$VaR_2"
VaR_2="VaR_2 was changed."
echo ${VaR_2}
readonly var
var="Can I change var?"
실행 결과
$ ./test.sh
VaR_2=변수2
VaR_2 was changed.
shell.sh: line 11: var: readonly variable
특별 변수
변수 | 기능 |
---|---|
$0 | 스크립트 이름 |
$1 ~ $9 | 인수 |
$# | 스크립트에 전달된 인수의 개수 |
$* | 모든 인수를 모아 하나로 처리 |
$@ | 모든 인수를 각각 처리 |
$? | 직전에 실행한 커맨드의 종료 값(0은 성공, 1은 실패) |
$$ | 이 쉘 스크립트의 PID |
$! | 마지막으로 실행한 백그라운드 PID |
변수 치환
문법 | 설명 |
---|---|
${var} | 변수 값을 넣는다. |
${var:-word} | 변수가 아직 세팅되지 않았거나 공백 문자열의 경우 word를 반환한다. var에는 저장되지 않는다. |
${var:=word} | 변수가 아직 세팅되지 않았거나 공백 문자열의 경우 word를 반환한다. var에 저장된다. |
${var:?word} | 변수가 아직 세팅되지 않았거나 공백 문자열의 경우 치환에 실패하고 스탠다드 에러가 표시된다. |
${var:+word} | 변수가 세팅되지 않은 경우 word가 반환된다. var에는 저장되지 않는다. |
배열
#!/bin/sh
# bash shell로 배열을 작성하는 방법
ARRAY=(item1 item2 item3 item4)
ARRAY[0]="ITEM1"
ARRAY[2]="ITEM3"
echo "ARRAY[0]: ${ARRAY[0]}"
echo "ARRAY[1]: ${ARRAY[1]}"
# 모든 요소에 접근
echo "ARRAY[*]: ${ARRAY[*]}"
echo "ARRAY[@]: ${ARRAY[@]}"
$ ./test.sh
ARRAY[0]: ITEM1
ARRAY[1]: item2
ARRAY[*]: ITEM1 item2 ITEM3 item4
ARRAY[@]: ITEM1 item2 ITEM3 item4
연산자
쉘에는 산술 연산을 expr 숫자 연산자 숫자
와 같이 사용한다.
연산자 | 의미 | 예 |
---|---|---|
+ | 덧셈 | echo expr 10 + 20 => 30 |
- | 뺄셈 | echo expr 20 - 10 => 10 |
* | 곱셈 | echo expr 11 \* 11 => 1 |
/ | 나눗셈 | echo expr 10 / 2 => 5 |
% | 나머지 | echo expr 10 % 4 => 2 |
= | 저장 | a=$b |
== | 동일 | |
≠ | 다름 |
'etc > IT 상식' 카테고리의 다른 글
[간단 정리] IOPS vs throughput (0) | 2023.07.03 |
---|---|
정규식 문법 정리 (0) | 2023.03.18 |
인자, 매개변수(Parameter) vs 인수(Argument) (0) | 2020.08.01 |