쉘 프로그래밍을 연마하자 (1)
프로그래밍/BASH SHELL2015. 1. 27. 10:00
반응형
[ 쉘 프로그래밍을 연마하자 (1) ]
리눅스를 사용함으로써 얻는 많은 재미중의 하나가 바로 쉘 프로그래밍이다. 쉘에 관한 내용은 이미 다른문서들을 통해서 잘 알고 있을 것이라 생각하고 생략하기로 한다. 그렇다면 쉘은 어느 정도 이해가 되었는데 쉘 프로그래밍이란 무엇인가? 간단하게 말하자면 현재 여러분이 쉘 프롬프트상에서 키보드를 통해 내리는 많은 명령어들, 그것들의 조합이 바로 쉘 프로그래밍이다.
대부분의 사람들이 쉘 프로그래밍을 처음 설명할때 DOS의 배치화일 작성과 비슷한것이라고 설명하곤 한다. 최근에 컴퓨터를 시작한 사람이라면 모를 수 도 있겠지만(DOS를 잘 모를테니), 쉘 프로그램은 별 다른 컴파일 과정을 거치지 않고 바로 명령어해석기(Bash 등)를 통해 결과값을 구하는 형식 (interpreter)의 프로그래밍언어이다. 그래서 간편하면서도 빠른 동작을 할 수 있다. 그러나 DOS의 그것과 다른점은 훨씬 강력하다는 것이다. 외국에는 쉘 프로그래머란 직업이 있을 정도이며, 각종 어플레케이션이나 cgi 등 못 만드는 프로그램이 없다고 해도 과언이 아니다. (만들 수 있다는 것이지 그것이 꼭 효율적이라는 것은 아니다)
쉘 프로그래밍으로 형성된 파일을 쉘 스크립트 라고 부른다. 이런 쉘 스크립 트 들은 리눅스,유닉스 시스템에서 광범위하게 사용된다. 부팅이나 시스템 관리및 기타설정등 여러분야에서 사용므로 만약 여러분이 시스템관리자라면 꼭 배워두어야 할 것이다. 간단한 예로 /etc/rc.d/ 아래에 있는 수많은 파일들은 모두 쉘 스크립트로 짜여진 것을 알 수 있다. (잘 모르겠는 분은 file이란 명령어 를 통해 확인해본다 ex: file <화일이름>) 파일 내부를 대충 훑어보면 무지 복 잡하게 보이고 쓸데없어 보일지도 모른다. 하지만 우리의 목표는 이런것들을 완벽하게 혹은 대충이나마 이해하는 것이다. 우리모두 쉘 프로그래밍이란 비법을 연마함으로써 한층 레벨업 된 리눅서로 도약해 보자.
처음시작할때 부터 헷갈리는 것이 있다. 쉘의 종류도 무척 다양하다. bash, csh, tcsh, ksh 등등.. 사용자의 취향마다 쓰는 쉘이 다르겠지만 여기서 우리는 가장 유명하고 많이 쓰여지는 Bash( GNU Bourne-Again SHell )을 그리고 Csh( C SHell )을 공부해 보자. csh가 계산식 같은 경우에는 편할지 모르겠지만 Bash 만큼 다양한 구문을 제공하지 않기 때문에 필자는 csh보다는 bash를 선호한다.
위에서 언급했던 /etc/rc.d/아래에 있던 파일을 다시 살펴보자. 제일 첫줄을 보면
#!/bin/sh
라고 적혀있는 것이 보일것이다. 모든 쉘스크립트에서는 맨 첫줄에 #!<쉘의위치> 란 형식으로 이 스크립트가 어떤 쉘로 실행될 것인지 설정 해 주어야 한다. 반드시 저렇게 하지 않을수도 있지만 일반적인 기본형식이므로 지켜주도록 하자. 참고로 그냥 # 만 적어 주면 다음에 나오는 라인은 주석 이 된다.
----[예제1] hello.sh ----------------------------
#!/bin/sh
echo "Hello World~"
-------------------------------------------------
간단한 쉘 스크립트를 만들어 보자. hello.sh 를 vi 등의 에디터를 통해 완성하고 실행 퍼미션을 준 뒤에 파일을 실행시켜보자.
[marine8@baboman marine8]$ chmod a+x hello.sh
[marine8@baboman marine8]$ ./hello.sh
Hello World~
[marine8@baboman marine8]$
echo는 문자열이나 변수값등을 출력해주는 명령어이다. 여기서는 간단하게 문자열을 출력해 보았다. 명령어에 관해 자세히 알고 싶은 독자는 man page 를 통해 확인해보면 아주 자세하게 알 수 있다. 예제를 하나 더 작성해보자.
----[예제1-2] myinfo.sh -------------------------
#!/bin/sh
echo " - This System's Environment -"
echo -n "HOSTNAME : "
echo $HOSTNAME
echo -n "USER : "
echo $USER
echo -n "NAME : "
NAME="Lee Yu Ri"
echo $NAME
echo -n "SHELL : "
echo $SHELL
echo -n "pwd : "
pwd
echo -n "ls : "
ls
--------------------------------------------------
아까 말했듯이 echo는 변수를 출력할때도 쓰인다. 쉘 프로그래밍에서 변수를 사용할때는 $를 앞에 붙이면 된다. 하지만 변수의 내용을 설정할 때는 $를 붙이지 않는다. 변수명=값 의 형식으로 하되 = 의 좌우에 공백 이 있어서는 안된다. 위에 나열된 변수중에 HOSTNAME, USER, SHELL은 환경변수값으로 시스템에 이미 정의되어있는것이고 ,NAME이란 지역변수를 하나 만들어서 등록해 본것이다. 그리고 pwd , ls의 예에서 보이듯 실행하려는 명령어는 그냥 적어주면 된다.
제1-2를 실행해 본 독자중 칼라모니터를 쓰고 뭔가 완벽함을 추구하는 분들중 마지막에 ls를 실행시켰는데 왜 칼라로 나오지 않느냐 라는 의문을 가진사람 이 있을것이다. 그런 의문을 가지지 않았다면 반성하기 바란다. :-) 사실 별내용 아니지만 설명해 보겠다. 보통 login후에 사용하는 현재의 쉘은 Login Shell로써 실행된다. Login Shell은 쉘이 실행될때 환경설정화일 (/etc/profile, ~/.profile , ~/.bashrc 등) 을 읽게 된다. 하지만 우리가 쉘 스크립트를 실행하게 되면 현재쉘말고 다른 쉘이 하나 떠서 스크립트 구문을 실행한뒤 종료되는 것이다. 그것은 당연히 Login Shell이 아니기때문에 환경설정화일 중 일부을 읽지 않게되고 그러므로 alias ls='ls --color=auto ' 이런식으로 ls 를 칼라로 보여주는 설정등이 되어있지 않은 상태로 ls가 실행되는 것이다.
그렇다면 모든 환경설정이 된 쉘로써 쉘프로그램을 실행시키고 싶으면 어떻게 해야 하는가. 아주 간단하다. 쉘 스크립트 구문에 환경설정관한 내용을 직접 적어주어 실행시키는 방법이 있겠고, 괜히 키보드 더 두드리기 싫은 사람은 맨 위에 #!/bin/sh 를 #!/bin/sh -login 이라고 바꿔줘서 실행하면 Login Shell형식 으로 쉘이 뜨기 때문에 환경설정파일들을 포함시키게 되고 되고 우리는 ls화면을 칼라로 볼수 있게 될거라고 확신하게 된다.
그러나 여기서 위에 적은 대로 바꾸어 실행하더라도 결과는 이전과 같은 것을 볼 수 있다. 그것은 Bash Script는 alias로 설정된 것은 쓸 수가 없기 때문이다. csh같은 경우에는 alias로 설정한 것도 script상에서 쓸 수 있지만 bash는 쓸 수 없다. 그러나 Bash에서는 csh에서는 지원하지 않는 함수기능을 지원한다. 즉 alias의 기능을 포함하면서도 더욱 강력하게 쓸 수 있는 것이다. 아래의 예제 1-3처럼 하면 될것이다.
----[예제1-3] myinfo2.sh --------------------------
#!/bin/sh
ll()
{
ls --color=auto
}
echo " - This System's Environment -"
echo -n "HOSTNAME : "
echo $HOSTNAME
echo -n "USER : "
echo $USER
echo -n "NAME : "
NAME="LEE YU REE"
echo $NAME
echo -n "SHELL : "
echo $SHELL
echo -n "pwd : "
pwd
echo -n "ls : "
ll
-----------------------------------------------------
----[예제2] read.sh -------------------------------
#!/bin/sh
echo -n "당신의 이름은? "
read name
echo -n "당신의 나이는? "
read age
echo 이름 : $name
echo 나이 : $age
-----------------------------------------------------
예제2는 read 명령을 이용해서 키보드로부터 값을 읽어드린후 그 값을 변수에 저장하고 출력해보는 것이다.
지금까지 쉘 프로그래밍에 대한 기초적인 것들을 알아 보았다. 미흡하나마 이 글이 여러분께 도움이 되었기를 빌며 다음에는 본격적으로 Bash 문법을 공부해 보기로 하자
[출처] 쉘 프로그래밍을 연마하자 (1)|작성자 박신양
반응형
'프로그래밍 > BASH SHELL' 카테고리의 다른 글
정규식 이해 (0) | 2015.01.27 |
---|---|
쉘 명령 기초 (0) | 2015.01.27 |
쉘 프로그래밍 (shell programming) (0) | 2015.01.27 |
쉘 프로그래밍을 연마하자 (3) (0) | 2015.01.27 |
쉘 프로그래밍을 연마하자 (2) (0) | 2015.01.27 |
댓글()