[쉘 스크립트] 쉘 스크립트 기초 (1)
카테고리: Linux
태그: Linux
🎯쉘 스크립트 시작
조금은 불친절하지만 무궁무진한 활용 가능성을 지닌 쉘 스크립트에 대해 알아보자!
사용자 변수
환경 변수 말고도 쉘 스크립트는 자체 변수를 설정하고 사용할 수 있다.
변수 설정 규칙
- 최대 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)
👍 개인 공부 기록용 블로그입니다. 오류나 조언이 있으시면 언제든지 댓글 혹은 메일로 남겨주시면 감사하겠습니다! 😄
댓글남기기