쉘프로그래밍
페이지 정보
작성자 MintState 댓글 0건 조회 16,662회 작성일 08-12-23 20:20본문
쉘프로그래밍
목차
1. Shell과 Shell programming이란?
2. 쉘 문법 - 변수, 연산
3. 쉘 문법 - 조건문,제어구조
4. 쉘 문법 - 목록
5. 쉘 문법 - 함수
6. 쉘 문법 - 명령어
7. 쉘 문법 - 명령실행
8. 쉘 문법 - 쉘 스크립트 내부에서 입력 전달
9. 쉘 문법 - 디버깅
10. 우리가 자주 쓰는 쉘 스크립트
11. 참고자료
-----------------------------------------------------------------------------
1. Shell과 Shell programming이란?
쉘이란 간단히 생각해서 MS-DOS의 명령어 처리기인 command.com과 비슷하다고 할 수 있다. 그렇지만 그 기능은 MS의 것보다 엄청나다고 할 수 있다. 우리가 리눅스를 사용 하면서 쓰고 있는 것들의 대부분이 쉘 스크립으로 짜여있는 것만 봐도 알수 있다.
쉘은 사용자를 유닉스(리눅스) 시스템에 이어주는 인터페이스로써 쉘을 통해 명령어를 입력하면 쉘은 해당 명령을 운영체제가 실행할 수 있도록 전달해주는 역활을 한다.
쉘의 종류는 다양하나 흔히 우리들이 쓰는 것은 bash와 tcsh이다.
쉘 프로그래밍은 빠르고 간편하게 짤 수 있는 인터프리터 언어로써 컴파일할 필요가 없으며 한줄씩 실행시킬 수 있는 장점이 있지만 정밀한 처리나 빠른 처리를 요구하는 것엔 부적합하다고 할 수 있다. 쉘 프로그래밍 작성방법은 두가지로써 하나는 실행할 명령을 순서대로 입력하여 대화식으로 실행하는 것이며, 다른 하나는 실행할 명령을 파일에 저장한 다음 실행하는 것이다.
2. 쉘 문법 - 변수, 연산
변수는 환경변수와 인자변수, 일반변수로 구분되며 변수를 사용하기 위해서는 C와는 달리 처음 선언해주는 것이 아니라 변수를 처음 사용할때 생성한다. 변수는 기본적으 로 문자열로 저장이 되며 변수의 내용을 보려면 $를 앞에 붙인후 echo명령으로 호출하 게 된다.
(변수를 인용처리 하기위해서는 작은 따옴표(')로 $변수를 묶거나 $ 앞에 \문자를 붙 임으로써 $의 특별한 의미를 없애버릴 수 있다. 또한 변수의 값에 공백이 포함되면 앞뒤로 따옴표로 묶어주어야 하며, 등호(=) 앞뒤에 공백을 넣지 말아야 한다)
1) 환경변수
쉘을 기동하면 기본적으로 세팅되는 변수들로써 일반적으로 사용자정의 변수와 구분 하기 위해서 대문자로 표현된다. 핵심적인 변수는 다음과 같다.
2) 인자변수
쉘 스크립트에 인자를 넘겨줄때 그 인자들에 대한 정보를 가지고 있는 변수들로써 전달되는 인자와 관련된 변수들은 다음과 같다
3) 일반변수
일반변수는 특별한 제약이 없으며 대소문자의 구분만 명확히 하면 된다.
3. 쉘 문법 - 조건문,제어구조
1) test, []
쉘 스크립트에서 참거짓 값을 판단할 수 있는 것은 test와 []로 보통 같은 의미를 지닌다. []명령어는 쉘 스크립트를 다른 프로그래밍 언어와 비슷하게 보이는 역할을 하기도 한다.
a. 문자열 비교
b. 산술 비교
c. 파일 조건
2) if
명령의 결과를 테스트하여 조건적으로 적절한 구문의 그룹을 실행시킨다.
a. 형식1(단일 if문)
b. 형식2(if~else문)
c. 형식3(여러가지 조건 검사)
3) for
지정한 범위 안에서 루프를 돌리는데 사용된다. 범위에 사용되는 값은 어떠한 문자열의 집합이라도 가능하다. 루프가 돌때마다 값1, 값2가 차례로 들어간다.
4) while
어떤 명령을 지정한 횟수만큼 실행시키기에는 부적합한 for루프를 보완하는 것으로 실행 횟수가 불확실할때 편리하다.
5) until
while과 비슷하나 조건이 참일동안 실행되는 것이 아니라 거짓일 동안 실행된다.
6) select
원하는 리스트를 출력하고 그중 선택된 것을 돌려준다. 주의할 점은 select의 루프 내에서 자동적으로 벗어날 수 없으므로 반드시 break문을 사용해서 벗어나야 한다.
7) case
여러 패턴을 검사하고 이에 적절한 구문을 실행시켜 주는 것으로 강력한 기능을 가지고 있으며 쉘스크립에 많이 등장한다.
4. 쉘 문법 - 목록
여러 명령어를 실행할때 앞의 명령의 결과에 의해서 다음 행동이 결정되어야 할 경우 AND나 OR조건을 사용해서 한번에 처리할 수 있다. 이것은 쉘 스크립트 뿐 아니라 명령행에서도 사용 가능하다.
1) AND목록
한번에 여러 명령을 한꺼분에 실행시킬 수 있다. AND 목록에서 이전의 명령이 성공 했다면 다음번 명령을 수행한다. 왼쪽 구문부터 시작하여 그 결과값이 참이라면 그 다음 명령어가 수행된다. 거짓이 반환되면 더이상 명령어를 실행하지 않는다.
2) OR목록
어떤 하나의 명령의 수행이 성공할때까지 일련의 명령을 계속 수행한다. 명령의 수행이 성공하면 더 이상 목록 중의 다른 명령은 수행하지 않는다. 왼쪽 구문부터 시작하여 그 결과값이 거짓이라면 오른편의 명령어가 수행된다. 참의 값이 반환되면 실행을 멈춘다.
3) AND와 OR의 혼용
아래와 같이 &&와 ||을 혼용하여 사용할수 있다. 참이면 문장1이 실행되고 거짓이 면 문장2가 실행된다.
5. 쉘 문법 - 함수
쉘 스크립 내부에 또는 다른 스크립트 파일에 함수를 정의해 놓고 사용할 수 있다. 함수를 사용하면 코드를 최적화 할 수 있고 코딩이 간결해지며, 재사용이 가능하다. 그러나 다른 스크립트 파일을 호출해서 함수를 실행할 경우, 가능은 하지만 스크립트 의 실행시간이 길어지고 함수의 결과를 전달하는 것이 까다롭기 때문에 가급적이면 외부 파일의 함수를 사용하지 않는 것이 좋다.
함수를 사용하는 방법은 함수명(function_name) 뒤에 인자를 적어준다. 그리고 함수 내부에서 지역(local)변수를 사용하고자 할 경우에는 변수명 앞에 local이란 예약어를 적어주면 된다.
6. 쉘 문법 - 명령어
쉘 스크립트 안에서 사용할 수 있는 명령은 두 종류로써 하나는 내부명령어이고 다른 하나는 프롬프트 상에서 실행시킬 수 있는 일반명령어이다. 내부명령이 외부명령보다 좀 더 효율적이라는 것을 제외하면 실질적인 차이는 없다.
1) break
for, while이나 until에서 제어 조건을 만나기 전에 루프를 벗어날 때 사용한다.
2) : 명령
의미없는(null) 명령으로 true를 대신해 논리값을 간단하게 하기 위해서 사용한다. while true와 같은 것을 while :와 같이 대체할 수 있으며, 변수의 조건을 지정할 수 있다.
3) continue
C에서와 비슷하며 for, while 또는 until 루프의 변수를 다음 값을 가지게 하고 다음 번 루프를 돌게 한다.
4) .명령
현재의 쉘에서 명령을 실행시킨다.
5) echo
개행문자를 포함한 문장을 간단하게 출력한다. (다음줄로 넘어간다)
6) eval
인자의 실제 값을 구하는데 사용한다.
7) exec
현재 쉘을 다른 프로그램으로 대체하거나 파일을 읽기 모드로 열때 사용한다.
8) exit n
현재 쉘을 종료한다. 종료시 n값을 리턴한다.
9) export
해당 쉘에서 파생된 자식 프로세스에서 export한 환경변수는 본래 쉘에서 관리한다
10) expr
표현식의 값을 구하는 것으로 x='expr $x+1'과 같이 사용된다. 하지만 expr보다는 $((계산식))을 사용한다.
11) printf
C에서의 printf와 흡사하다.
형식 : printf "Format String" arg1 arg2 arg3 ...
12) return
쉘 함수에서 값을 반환할때 쓰인다.
13) set
쉘 내부에서 매개 인자를 설정한다. set의 인자로 쓰인 문자열은 공백에 의해 $1 부터 차례대로 대입된다.
14) shift
쉘의 인자를 한자리씩 아래로(n->1로) 이동시킨다.
15) trap
쉘의 실행도중 시그널을 처리하는 시그널 처리기를 만드는 역할을 한다.
쉘 스크립트는 위에서 아래로 실행되므로 보호하려는 부분 이전에 trap명령을 사용한다. trap조건을 기본으로 사용하려면 명령에 - 를 넣으면 된다. 신호를 무시할려면 ''빈 문자열을 준다.
16) unset
변수나 함수를 제거한다.
7. 쉘 문법 - 명령실행
1) 외부 명령의 실행 결과를 변수에 집어넣어 변수의 값으로 사용하려면 $(command) 구문을 이용하면 된다. 또는 `command`의 형식도 유효하다.
2) 산술 확장
쉘에 있어서 변수는 모두 문자열로 저장이 되기 때문에 연산을 할려면 다음과 같은 약간 복잡한 거쳐야 된다.
변수 = $((산술식))
산술식내에는 변수($1,$와 같은)도 들어갈 수 있으며 숫자가 아닌 문자열, 또는 문자열이 담겨있는 변수가 들어가면 그것들은 계산에서 제외된다. (0으로 간주되어 연산이 이루어지지 않는다)
3) 매개변수 확장
매개변수 확장이란 변수의 값을 문자열 등으로 대체하는 것으로 단순만 대체뿐만 아니라 변수 내의 문자열을 조작하여 원하는 문자열만 추출할 수도 있다.
8. 쉘 문법 - 쉘 스크립트 내부에서 입력 전달 (Here Documents)
쉘 내부에서 명령어에 입력을 전달하는 방법으로 전달된 입력은 마치 키보드에서 입력 한 것과 같이 행동한다.
다른 방법으로는 ed에디터와 조합으로 파일을 수정할 수 있다.
9. 쉘 문법 - 디버깅
쉘 스크립틀르 디버깅하는 것은 매우 쉽지만 도움이 될만한 특별한 도구가 없다. 따라서 echo문을 사용하여 변수의 내용을 살펴보거나, 문제가 있는 부분을 수동으로 쉘에서 상호 대화식으로 입력하는 테스트를 할 수 있다.
쉘의 명령행 옵션을 사용하거나 set명령을 사용하여 에러를 추적할 수 있다.
(set의 옵션 플래그를 켤때는 -o를, 끌때는 +o를 사용한다.)
쉘에서 아래와 비슷한 내용을 스크립트의 처음에 놓으면 어디에서 EXIT 시그널이 발생 해서 종료했는지 확인할 수 있다.
10. 우리가 자주 쓰는 쉘 스크립트 (httpd)
목차
1. Shell과 Shell programming이란?
2. 쉘 문법 - 변수, 연산
3. 쉘 문법 - 조건문,제어구조
4. 쉘 문법 - 목록
5. 쉘 문법 - 함수
6. 쉘 문법 - 명령어
7. 쉘 문법 - 명령실행
8. 쉘 문법 - 쉘 스크립트 내부에서 입력 전달
9. 쉘 문법 - 디버깅
10. 우리가 자주 쓰는 쉘 스크립트
11. 참고자료
-----------------------------------------------------------------------------
1. Shell과 Shell programming이란?
쉘이란 간단히 생각해서 MS-DOS의 명령어 처리기인 command.com과 비슷하다고 할 수 있다. 그렇지만 그 기능은 MS의 것보다 엄청나다고 할 수 있다. 우리가 리눅스를 사용 하면서 쓰고 있는 것들의 대부분이 쉘 스크립으로 짜여있는 것만 봐도 알수 있다.
쉘은 사용자를 유닉스(리눅스) 시스템에 이어주는 인터페이스로써 쉘을 통해 명령어를 입력하면 쉘은 해당 명령을 운영체제가 실행할 수 있도록 전달해주는 역활을 한다.
쉘의 종류는 다양하나 흔히 우리들이 쓰는 것은 bash와 tcsh이다.
쉘 프로그래밍은 빠르고 간편하게 짤 수 있는 인터프리터 언어로써 컴파일할 필요가 없으며 한줄씩 실행시킬 수 있는 장점이 있지만 정밀한 처리나 빠른 처리를 요구하는 것엔 부적합하다고 할 수 있다. 쉘 프로그래밍 작성방법은 두가지로써 하나는 실행할 명령을 순서대로 입력하여 대화식으로 실행하는 것이며, 다른 하나는 실행할 명령을 파일에 저장한 다음 실행하는 것이다.
2. 쉘 문법 - 변수, 연산
변수는 환경변수와 인자변수, 일반변수로 구분되며 변수를 사용하기 위해서는 C와는 달리 처음 선언해주는 것이 아니라 변수를 처음 사용할때 생성한다. 변수는 기본적으 로 문자열로 저장이 되며 변수의 내용을 보려면 $를 앞에 붙인후 echo명령으로 호출하 게 된다.
(변수를 인용처리 하기위해서는 작은 따옴표(')로 $변수를 묶거나 $ 앞에 \문자를 붙 임으로써 $의 특별한 의미를 없애버릴 수 있다. 또한 변수의 값에 공백이 포함되면 앞뒤로 따옴표로 묶어주어야 하며, 등호(=) 앞뒤에 공백을 넣지 말아야 한다)
1) 환경변수
쉘을 기동하면 기본적으로 세팅되는 변수들로써 일반적으로 사용자정의 변수와 구분 하기 위해서 대문자로 표현된다. 핵심적인 변수는 다음과 같다.
2) 인자변수
쉘 스크립트에 인자를 넘겨줄때 그 인자들에 대한 정보를 가지고 있는 변수들로써 전달되는 인자와 관련된 변수들은 다음과 같다
3) 일반변수
일반변수는 특별한 제약이 없으며 대소문자의 구분만 명확히 하면 된다.
3. 쉘 문법 - 조건문,제어구조
1) test, []
쉘 스크립트에서 참거짓 값을 판단할 수 있는 것은 test와 []로 보통 같은 의미를 지닌다. []명령어는 쉘 스크립트를 다른 프로그래밍 언어와 비슷하게 보이는 역할을 하기도 한다.
a. 문자열 비교
b. 산술 비교
c. 파일 조건
2) if
명령의 결과를 테스트하여 조건적으로 적절한 구문의 그룹을 실행시킨다.
a. 형식1(단일 if문)
b. 형식2(if~else문)
c. 형식3(여러가지 조건 검사)
3) for
지정한 범위 안에서 루프를 돌리는데 사용된다. 범위에 사용되는 값은 어떠한 문자열의 집합이라도 가능하다. 루프가 돌때마다 값1, 값2가 차례로 들어간다.
4) while
어떤 명령을 지정한 횟수만큼 실행시키기에는 부적합한 for루프를 보완하는 것으로 실행 횟수가 불확실할때 편리하다.
5) until
while과 비슷하나 조건이 참일동안 실행되는 것이 아니라 거짓일 동안 실행된다.
6) select
원하는 리스트를 출력하고 그중 선택된 것을 돌려준다. 주의할 점은 select의 루프 내에서 자동적으로 벗어날 수 없으므로 반드시 break문을 사용해서 벗어나야 한다.
7) case
여러 패턴을 검사하고 이에 적절한 구문을 실행시켜 주는 것으로 강력한 기능을 가지고 있으며 쉘스크립에 많이 등장한다.
4. 쉘 문법 - 목록
여러 명령어를 실행할때 앞의 명령의 결과에 의해서 다음 행동이 결정되어야 할 경우 AND나 OR조건을 사용해서 한번에 처리할 수 있다. 이것은 쉘 스크립트 뿐 아니라 명령행에서도 사용 가능하다.
1) AND목록
한번에 여러 명령을 한꺼분에 실행시킬 수 있다. AND 목록에서 이전의 명령이 성공 했다면 다음번 명령을 수행한다. 왼쪽 구문부터 시작하여 그 결과값이 참이라면 그 다음 명령어가 수행된다. 거짓이 반환되면 더이상 명령어를 실행하지 않는다.
2) OR목록
어떤 하나의 명령의 수행이 성공할때까지 일련의 명령을 계속 수행한다. 명령의 수행이 성공하면 더 이상 목록 중의 다른 명령은 수행하지 않는다. 왼쪽 구문부터 시작하여 그 결과값이 거짓이라면 오른편의 명령어가 수행된다. 참의 값이 반환되면 실행을 멈춘다.
3) AND와 OR의 혼용
아래와 같이 &&와 ||을 혼용하여 사용할수 있다. 참이면 문장1이 실행되고 거짓이 면 문장2가 실행된다.
5. 쉘 문법 - 함수
쉘 스크립 내부에 또는 다른 스크립트 파일에 함수를 정의해 놓고 사용할 수 있다. 함수를 사용하면 코드를 최적화 할 수 있고 코딩이 간결해지며, 재사용이 가능하다. 그러나 다른 스크립트 파일을 호출해서 함수를 실행할 경우, 가능은 하지만 스크립트 의 실행시간이 길어지고 함수의 결과를 전달하는 것이 까다롭기 때문에 가급적이면 외부 파일의 함수를 사용하지 않는 것이 좋다.
함수를 사용하는 방법은 함수명(function_name) 뒤에 인자를 적어준다. 그리고 함수 내부에서 지역(local)변수를 사용하고자 할 경우에는 변수명 앞에 local이란 예약어를 적어주면 된다.
6. 쉘 문법 - 명령어
쉘 스크립트 안에서 사용할 수 있는 명령은 두 종류로써 하나는 내부명령어이고 다른 하나는 프롬프트 상에서 실행시킬 수 있는 일반명령어이다. 내부명령이 외부명령보다 좀 더 효율적이라는 것을 제외하면 실질적인 차이는 없다.
1) break
for, while이나 until에서 제어 조건을 만나기 전에 루프를 벗어날 때 사용한다.
2) : 명령
의미없는(null) 명령으로 true를 대신해 논리값을 간단하게 하기 위해서 사용한다. while true와 같은 것을 while :와 같이 대체할 수 있으며, 변수의 조건을 지정할 수 있다.
3) continue
C에서와 비슷하며 for, while 또는 until 루프의 변수를 다음 값을 가지게 하고 다음 번 루프를 돌게 한다.
4) .명령
현재의 쉘에서 명령을 실행시킨다.
5) echo
개행문자를 포함한 문장을 간단하게 출력한다. (다음줄로 넘어간다)
6) eval
인자의 실제 값을 구하는데 사용한다.
7) exec
현재 쉘을 다른 프로그램으로 대체하거나 파일을 읽기 모드로 열때 사용한다.
8) exit n
현재 쉘을 종료한다. 종료시 n값을 리턴한다.
9) export
해당 쉘에서 파생된 자식 프로세스에서 export한 환경변수는 본래 쉘에서 관리한다
10) expr
표현식의 값을 구하는 것으로 x='expr $x+1'과 같이 사용된다. 하지만 expr보다는 $((계산식))을 사용한다.
11) printf
C에서의 printf와 흡사하다.
형식 : printf "Format String" arg1 arg2 arg3 ...
12) return
쉘 함수에서 값을 반환할때 쓰인다.
13) set
쉘 내부에서 매개 인자를 설정한다. set의 인자로 쓰인 문자열은 공백에 의해 $1 부터 차례대로 대입된다.
14) shift
쉘의 인자를 한자리씩 아래로(n->1로) 이동시킨다.
15) trap
쉘의 실행도중 시그널을 처리하는 시그널 처리기를 만드는 역할을 한다.
쉘 스크립트는 위에서 아래로 실행되므로 보호하려는 부분 이전에 trap명령을 사용한다. trap조건을 기본으로 사용하려면 명령에 - 를 넣으면 된다. 신호를 무시할려면 ''빈 문자열을 준다.
16) unset
변수나 함수를 제거한다.
7. 쉘 문법 - 명령실행
1) 외부 명령의 실행 결과를 변수에 집어넣어 변수의 값으로 사용하려면 $(command) 구문을 이용하면 된다. 또는 `command`의 형식도 유효하다.
2) 산술 확장
쉘에 있어서 변수는 모두 문자열로 저장이 되기 때문에 연산을 할려면 다음과 같은 약간 복잡한 거쳐야 된다.
변수 = $((산술식))
산술식내에는 변수($1,$와 같은)도 들어갈 수 있으며 숫자가 아닌 문자열, 또는 문자열이 담겨있는 변수가 들어가면 그것들은 계산에서 제외된다. (0으로 간주되어 연산이 이루어지지 않는다)
3) 매개변수 확장
매개변수 확장이란 변수의 값을 문자열 등으로 대체하는 것으로 단순만 대체뿐만 아니라 변수 내의 문자열을 조작하여 원하는 문자열만 추출할 수도 있다.
8. 쉘 문법 - 쉘 스크립트 내부에서 입력 전달 (Here Documents)
쉘 내부에서 명령어에 입력을 전달하는 방법으로 전달된 입력은 마치 키보드에서 입력 한 것과 같이 행동한다.
다른 방법으로는 ed에디터와 조합으로 파일을 수정할 수 있다.
9. 쉘 문법 - 디버깅
쉘 스크립틀르 디버깅하는 것은 매우 쉽지만 도움이 될만한 특별한 도구가 없다. 따라서 echo문을 사용하여 변수의 내용을 살펴보거나, 문제가 있는 부분을 수동으로 쉘에서 상호 대화식으로 입력하는 테스트를 할 수 있다.
쉘의 명령행 옵션을 사용하거나 set명령을 사용하여 에러를 추적할 수 있다.
(set의 옵션 플래그를 켤때는 -o를, 끌때는 +o를 사용한다.)
쉘에서 아래와 비슷한 내용을 스크립트의 처음에 놓으면 어디에서 EXIT 시그널이 발생 해서 종료했는지 확인할 수 있다.
10. 우리가 자주 쓰는 쉘 스크립트 (httpd)
|
댓글목록
등록된 댓글이 없습니다.