검색결과 리스트
bash에 해당되는 글 1건
- 2011.01.20 Bash 스크립트
글
Bash 스크립트
운영체제로그/Linux
2011. 1. 20. 22:33
리눅스를 서버로 자바언어 기반의 웹서비스를 운영하려고 준비하다가, 로그를
시간, 일일 단위로 수집하여 에러가 발생하면 메일로 전송해주는 기능을 작성해야할 일이 생겼다.
스프링에서 지원해주는 스케줄링과 메일전송 기능을 사용할 수도 있지만, crontab과 몇 가지 리눅스 유틸리티를
사용해서도 쉽게 해결할 수 있는 일이다.
일단 스크립트에 익숙지 않기 때문에 Bash 스크립트 구문을 간략히 정리해보고 원하는 기능을 구현해보자
사용자의 디폴트쉘은 /etc/password 파일에 사용자 엔트리에 기반하여 적용이 되며, 대부분 bash(/bin/bash)가 사용된다.
bash 쉘은 시작시에 /etc/profile 파일을 읽어서 모든 사용자에 쉘환경에 적용을 한다. 사용자 홈디렉토리에 위치하고 있는
.bash_profile, .bash_login, .profile 파일은 현재 쉘환경만 적용이 된다. 쉘이 닫힐 때는 ~/.bash_logout 파일이 실행이 된다.
1 스크립트 실행
스크립트를 실행하기 위해서는, 파일에 실행권한을 부여해야 한다.
$chmod u+x myscript.sh
bash 명령을 주어 명시적으로 실행하려면, 스크립트 파일의 가장 첫라인은 다음과 같이 시작해야 한다.
#!/bin/bash
2 변수선언과 테스트문
테스트문은 참과 거짓을 판별하는 표현식으로 대괄호[] 안에 표시를 한다. 변수를 선언하고 테스트문을 사용하는 예이다.
MYSTRING=abc if [ $MYSTRING = abc ] ; thenecho “The variable is abc” if
위 예에서는 MYSTRING 이라는 변수를 선언하고 그 값이 "abc" 와 같은면 메시지를 출력하고 있다.
다음은 테스트문에서 수를 비교하는 예이다.
MYNUMBER=1
if [ $MYNUMBER -eq 1 ] ; then
echo “MYNUMBER equals 1”;
fi
if [ $MYNUMBER -lt 2 ] ; then
echo “MYNUMBER <2”;
fi
if [ $MYNUMBER -le 1 ] ; then
echo “MYNUMBER <=1”;
fi
if [ $MYNUMBER -gt 0 ] ; then
echo “MYNUMBER >0”;
fi
if [ $MYNUMBER -ge 1 ] ; then
echo “MYNUMBER >=1”;
fi
각각 MYNUMBER 변수에 있는 값을 비교하여 메시지를 출력하고 있다. 테스문에서 사용한 기호는 각각 =, <, <=, >, >= 를 의미한다. 다음은 파일에 대한 테스문 예이다.
filename=”$HOME”
if [ -e $filename ] ; then
echo “$filename exists”;
fi
if [ -f “$filename” ] ; then
echo “$filename is a regular file”
elif [ -d “$filename” ] ; then
echo “$filename is a directory”
else
echo “I have no idea what $filename is”
fi
위에서 사용한 테스트문 연산자에 대해서 알아보자 .
| 연산자 | 의미 | 연산자 | 의미 |
| -e(a) file | 파일이 존재하는지 검사 | expr1 -a expr2 | and |
| -d file | 파일이 디렉토리인지 검사 | expr1 -o expr2 | or |
| -f file | 파일이 일반파일인지 검사 | file1 -nt file2 | modification time is newer than |
| -L(f) file | 파일이 심볼릭 링크인지 검사 | file1 -ot file2 | modification time older than |
| -n string | 문자열길이가 0보다 큰지검사 | file1 -ef file2 | 두 파일이 링크로 연결유무 |
| -z string | 문자열길이가 0인지 검사 | var1 -ne(!=) var2 | not equal |
| -o file | 파일을 소유하고 있는지검사 | var1 -eq(=) var2 | equal |
| -r file | 파일을 읽을 수 있는지 검사 | var1 -ge var2 | equal or greater than |
| -w file | 파일을 쓸 수 있는지 검사 | var1 -gt var2 | greater than |
| - x file | 파일을 쓸 수 있는지 검사 | var1 -le var2 | less than or equal |
| -s file | 파일이 존재하고, 0바이트보다 큰지 검사 |
var1 -lt var2 | less than |
3 case 문 (c언어의 switch 문)
case “$VAR” in
string1)
{ action1 };;
string2)
{ action2 };;
*)
{ default action } ;;
esac
4 for 문
for NUMBER in 0 1 2 3 4 5 6 7 8 9 do echo The number is $NUMBER done아래와 같이 backtick(`)으로 감싸 ls 명령을 수행한 결과에 대해서 반복을 할수도 있다.
for FILE in `/bin/ls`; do
echo $FILE;
done
5 while문
변수를 카운트하여 루프를 도는 예이다.
VAR=0
while [ $VAR -lt 3 ]; do
echo $VARVAR=$[$VAR+1]
Done
6 until 문
until 구문을 사용하여, while 문과 동일한기능을 수행할 수 있다.
VAR=0 until [ $VAR -eq 3 ]; do echo $VAR; VAR=$[$VAR+1]; done
'운영체제로그 > Linux' 카테고리의 다른 글
| 리눅스 파일시스템 계층 표준(Filesystem Hierarchy Standard) (0) | 2011.03.09 |
|---|---|
| su, sudo : 특정 사용자 권한으로 쉘/명령 실행 (0) | 2011.03.08 |
| cURL (0) | 2011.02.18 |
| grub에서 디폴트 부팅 os 변경하기 (0) | 2011.02.16 |
| Bash 스크립트 (0) | 2011.01.20 |
| [Ubuntu] NFS 사용하기 (0) | 2011.01.10 |