[쉘 스크립트] 쉘 스크립트 기초 (1)

업데이트:     Updated:

카테고리:

태그:

🎯쉘 스크립트 시작

조금은 불친절하지만 무궁무진한 활용 가능성을 지닌 쉘 스크립트에 대해 알아보자!

사용자 변수

환경 변수 말고도 쉘 스크립트는 자체 변수를 설정하고 사용할 수 있다.

변수 설정 규칙

  • 최대 20 글자로 숫자 또는 밑줄로 이루어진 텍스트 문자열
  • 대소문자를 구분하므로 var1과 Var2는 다르다
  • 값은 등호를 사용하여 사용자 변수에 할당된다.
  • 변수, 등호, 값 사이에는 빈칸이 있으면 안된다.

e.g)

var1=10
var2=-57
var3=string
var4="still more testing"
  • 쉘 스크립트는 변수의 데이터 유형을 자동으로 결정한다.
  • 쉘 스크립트 안에서 정의된 변수는 스크립트가 완료되면 사라진다.

변수 값을 참조하는 방법

  • $변수명
  • ${변수명}

명령 치환

쉘 스크립트의 유용한 기능 중 하나는 명령의 출력 결과를 활용할 수 있다는 것이다.

명령 치환 사용방법

  • 역따옴표 문자 (`)
  • $( ) 형식

e.g)

다음은 현재 날짜를 today 변수에 저장하고 ls 명령의 출력 결과 파일명에 활용하는 예제이다.

#!/bin/bash

today=$(date +%y%m%d)
ls -al /usr/bin > log.$today 

수학 연산

쉘 스크립트에서 수학 연산을 수행하는 몇 가지 방법을 제공한다. 이 중에 expr 명령, 대괄호 사용 사용법에 대해 알아본다.

  • expr 명령
  • 대괄호 사용
  • bc 명령

이 밖에 수학 연산을 수행하는 다른 방법:

  • bc 명령
  • $(( ))
  • awk 명령

expr

  • 대부분의 수학 연산자는 쉘에서 다르게 해석될 가능성이 존재한다. (예를 들어 ‘*’) 이 문제를 해결하려면 expr 명령에 전달하기 전에 잘못 해석할 수 있는 문자를 구별하기 위해 이스케이프() 처리하거나 연산자를 따옴표(‘‘)또는 쌍따옴표(““)로 묶어야 한다.
  • 연산자와 피연산자 사이에는 공백이 포함되어야 한다.
# expr 1+1
1+1
# expr 1 + 1
2
# expr 1 '*' 1
1
# expr 1 "*" 1
1
# expr 1 \* 1
1

대괄호

  • bash 쉘은 expr 명령과 함께 수식을 처리하는 훨씬 쉬운 방법인 대괄호 방식을 제공한다.
  • 대괄호 방식을 이용하는 경우 곱셈(‘*’) 기호나 다른 글자를 쉘이 잘못 해석할 가능성에 대한 걱정을 할 필요가 없다.
# echo $[1+1]
2

스크립트 종료

쉘에서 실행되는 모든 명령은 쉘에 처리가 끝났음을 알려주는 종료 상태를 사용한다. 종료 상태는 명령 실행이 완료되면 0과 255 사이의 정수 값을 명령으로부터 쉘로 전달한다. 이 값을 스크립트에서 사용할 수 있다.

종료 상태 확인

  • 리눅스는 마지막으로 실행된 명령의 종료 상태 값을 보관하는 특별한 변수인 $? 변수를 제공한다. 쉘이 실행한 마지막 명령의 종료 상태를 이 변수가 저장한다.
  • 관례에 따라 성공적으로 완료된 명령의 종료 상태는 0이다. 명령이 오류를 내고 완료되면 0~255 사이의 양의 정수값이 종료 상태에 저장된다.
# echo '1+1' | bc
2
# echo $?
0

exit 명령

  • 쉘 스크립트는 스크립트의 마지막 명령의 종료 상태로 끝마친다. 이때 사용자 정의 종료 상태 코드를 돌려주도록 변경할 수 있다.
  • exit 명령은 스크립트가 종료될 때 종료 코드를 지정할 수 있다.
  • exit 명령의 매개변수에 변수를 사용할 수도 있고 종료 상태 코드는 255까지의 정수 값이 사용되어야 한다.
  • 만약 0~255 범위의 종료 상태 코드를 갖지 않는 경우 쉘은 나머지 연산을 통해 종료 코드를 자동으로 변경한다.
$ cat exitCodeTest.sh 
#!/bin/bash
var1=10
var2=20
var3=$[$var1+$var2]
echo "The answer is $var3"
$ ./exitCodeTest.sh 
The answer is 30
$ echo $?
0

$ cat exitCodeTest.sh 
#!/bin/bash
var1=10
var2=30
var3=$[$var1*$var2]
echo "The answer is $var3"
exit $var3
$ ./exitCodeTest.sh 
The answer is 300
$ echo $?
44

📖출처

리처드 블룸, 크리스틴 브레스, ⌜리눅스 커맨드라인 쉘 스크립트 바이블⌟, 스포트라잇북(2016)


👍 개인 공부 기록용 블로그입니다. 오류나 조언이 있으시면 언제든지 댓글 혹은 메일로 남겨주시면 감사하겠습니다! 😄

맨 위로 이동하기

Linux 카테고리 내 다른 글 보러가기

댓글남기기