[펌] Shell programing
os/Linux 2004. 11. 26. 13:41 |로 만들어놓고 실행하는 것이 훨씬 간편하다.
쉘 스크립트는 쉘에서 사용하는 명령어들을 나열하여 파일로 저장하여 실행하는 것을 말한다.
아래는 쉘 스크립트의 예이다.
======================== date ls -al ======================= 결과 : date명령을 실행한 후에 ls -al명령을 실행한 결과를 화면에 출력 |
<쉘 스크립트 예 >
쉘 프로그램은 스크립트 안에 해당 쉘의 문법을 사용하여 프로그램으로 작성한 것을 말하며, /bin/ksh, /bin/csh, /bin/bash 등 리눅스에서 사용되는 쉘마다 약간 다른 설정값등 약간 다른 문법을 가지고 있다. 여기에서는 가장 많이 쓰이고 있는 /bin/bash쉘의 쉘 프로그래밍 작성법에 대해서 알아볼 것이다.
쉘 프로그램을 잘 활용하면 서버를 관리하는데 많은 도움이 된다.
8.1 쉘 프로그램의 변수
앞서서 쉘프로그램도 프로그램의 범주안에 들어간다고 했다. 그러므로 쉘 프로그램도 변수를 사용한
다. 하지만 C언어처럼 미리 변수를 지정해놓을 필요는 없다. 필요할 때 마다 변수를 만들어서 사용하
면 된다.
쉘 스크립트의 변수를 사용할 때는 $를 앞에 붙여야 변수라고 인식을 하게 된다. 다만 변수에 값을 대
입할 때에는 $기호를 사용하지 않는다.
변수를 생성하는 방법은 특별한 것은 없지만 변수의 첫 자는 영문자(대소문자 구별) 이거나, 숫자 이
어야 한다.
================== #!/bin/sh <- 프로그램을 해석할 해석기 지정한다. manpage="12345" <- 변수에 값을 대입시 echo "$manpage" .<- 변수를 사용할 때 ================== 결과 : 12345 |
쉘 프로그램에서는 직접 만들어서 사용할 수 있는 변수도 있지만 기본적으로 제공되고 있는 변수가 있다. 이들을 환경변수라 한다.
환경 변수 | 설 명 |
$PATH | 서버에 설정되어 있는 패스(path)가 지정된 경로의 값을 가지고 있다. |
$LANG | 서버에 설정된 언어의 값을 가지고 있는 변수 |
$SHELL | 현재 사용자가 사용하고 있는 쉘의 정보를 가지고 있는 변수 |
$HOME | 현재 사용자의 홈 디렉토리의 경로 정보를 가지고 있는 변수 |
메일이 저장된 파일의 경로 정보를 가지고 있는 변수 | |
$MAILCHECK | 새로운 메일을 검사하는 시간 간격을 초 단위로 가지고 있는 변수 |
$PWD | 현재 디렉토리의 경로 정보를 가지고 있는 변수 |
$PS1 | 사용자의 프롬프트 형태의 정보를 가지고 있는 변수 |
$IFS | Internal File Separator로서 input-word-separator로서 사용할 문자 를 지정한다. |
환경 변수는 모두 대문자 이며, 환경변수는 쉘에서 특수한 의미로 해석하는 것이기 때문에 임의로 값
을 대입하게 될 때에는 주의를 가지고 변경 해야 한다.
기타 다양한 환경 변수가 있으면 이들은 set 명령을 통해서 확인할 수 있다.
특수 변수 | 설 명 |
$0 | 실행한 쉘 스크립트의 이름 |
$ARGV | <ARGV>로부터 읽어들일 때 현재의 파일 이름 |
$# | 쉘 스크립트 실행할 때 사용한 인자의 총 개수 |
$$ | 쉘 스크립트가 실행되었을 때의 프로세스 ID (PID) |
기타 ($. , $(, $<, $/ 등등의 많은 특수변수가 있지만 perl에서 사용되는 것이거나 자주 사용하지 않는 것이라서 생략하도록 한다.)
인자 변수 | 설 명 |
$n | 쉘스크립트를 실행할 때 인자로 적어준 값의 정보를 가지고 있는 변수 (n = 숫자) |
$* | $n으로 받아온 모든 인자들의 정보를 가지고 있는 변수로서 IFS 변수 에 의해서 구분된다. |
$@ | $* 과 동일하다. (IFS에 의해서 구분 받지 않는다고 하지만 모두 구분 된다.) |
cat test.sh ================ #!/bin/sh IFS="_" echo $* ================ sh test.sh 1 2 3_4 / 5 결과 : 1 2 3 4 / 5 (“_”는 IFS 구분자로서 인식이 된다) |
< 인자 변수와 IFS의 실행 결과 >
8.2 연 산
쉘프로그래밍은 쉘 명령어만 나열해서 쓰는 것과는 달리 연산식도 계산할수 있다.
연산식을 쓰는 방법은 반드시 아래의 규칙에 따라야 한다.
1. $((연산식))
2. $[연산식]
3. echo 연산식 | bc [-l]
1. 2번은 쉘에서 제공되는 일반적인 연산법이며 오직 정수만을 계산하고 표현할 수가 있다. 하지만 좀더 상세하게 나머지 등의 고급 연산을 하기 위해서는 3번처럼 서버에서 제공되는 bc라는 계산기를 사용하여 계산할 수 있다. bc의 상세한 기능은 man page를 참고 하기 바란다.
================== #!/bin/sh i=1 while [ $i != 10 ]; do echo "$i" i=$(($i+1)) done ================== |
< 1~9까지 카운터 하는 쉘 프로그램 >
위 계산식은 1-9까지의 숫자를 카운터 하는 프로그램이다. 연산이 어떻게 실제 쉘프로그램에서 쓰여
지는지를 확인해보기 위해서 아직 알아보지 않은 while문을 써서 나타낸 것이므로 while을 모른다 고
해서 크게 문제되지 않는다. while문은 다음에 알아보게 될 것이다.
8.3 기본 문법 1
문자열 비교 구문 | 설 명 |
[ string1 = strings2 ] | 두 string 문자열이 같다면 참 |
[ string1 != string2 ] | 두 sting문자열이 같이 않다면 참 |
[ -n string ] | string 문자열의 길이가 0[null] 아니라면 참 |
[ -z string ] | string 문자열의 길이가 0[null] 이라면 참 |
[ string1 -a string2 ] | string1과 string2의 결과가 모두 같다면 참 (AND) |
[ string1 -o string2 ] | string1과 string2의 결과 중에 하나라도 참이면 참 (OR) |
문자열이 하나의 단일 문자열이 아니고 space(공백)을 가지는 문자열이라면 “ string "으로 묶어 줘야
한다.
산술 비교 구문 | 설 명 |
[ A -eq B ] | 두 표현식의 값이 같다면 참 |
[ A -ne B ] | 두 표현식의 값이 다르면 참 |
[ A -gt B ] | 두 표현식중에서 A가 크다면 (A > B) 참 |
[ A -ge B ] | 두 표현식중에서 A가 크거나 같다면 (A >= B) 참 |
[ A -lt B ] | 두 표현식 중에서 A가 작다면 (A < B) 참 |
|