Shell Script

2023. 3. 26. 21:34etc/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