다음 이전 차례

6. 약간의 프로그래밍

6.1 스크립트 짜기 : .BAT 화일 만들기

긴 명령어에 대한 단축 명령으로서 .BAT 화일을 사용한 적이 있다면( 본인은 많이 그러했다 ) profile 이나 .profile 안에다( 위의 예 참고 ) 적절한 alias 행을 넣 어주기만 하면 된다. 하지만 .BAT 이 좀 더 복잡해진다면 셸을 통해 사용할 수 있 는 스크립트 언어를 애호하게 될 것이다. 더 나은 것은 아니더라도 QBASIC 만큼이 나 셸은 강력하다. 변수는 물론 while, for, case, if ... then ... else 등의 제어문이 있고 또 다른 많은 기능들이 들어있다.

다른 실제적인 프로그래밍에 대한 좋은 대안이라고도 할 수 있다. 도스에서는 .BAT 에 해당하는 스크립트를 짜기 위해선 명령 지시문을 포함하는 표준 아스키 화일을 쓰고 저장한 다음, 수행가능하게 만들어주면 된다.

$ chgmod u+x <scriptfile>

실행하기 위해서는 그냥 이름을 타이핑한다. 한 마디 경고. 시스템 편집기는 vi 가 있는데 약간 배우기 어려울 것이다. 여러분이 어렵다고 투덜댈 것이라고 확신하며 본인 또한 제대로 알지 못하므로 여기서 설명하지는 않겠다. Matt Welsh씨의 "Linux installation..." 페이지 109쪽 을 보라. joe 나 X 용 이맥스 등을 선택하는 것도 좋다. 다음과 같이만 말해두면 될 것 같다.

- 텍스트를 입력하기 위하여 i 를 타이핑한 후 텍스트를 입력한다. - 저장하지 않고 끝내기 위해서는 ESC 키를 한 번 누르고 :q! 하면 된다. - 저장하고 끝내기 위해서는 ESC 키를 한 번 누르고 :wq 하면 된다.

Writing scripts under Linux is such a vast subject it would require a book 리눅스에서 스크립트 짜는 일은 그것만으로도 한 권이 책이 될 만큼 방대한 분량의 주제이다. 그리고 더 깊이 들어가지는 않을 것이다. 단지 여러분에게 유용한 몇 가 지 예들에서 여러분이 기본적인 규칙을 발견할 수 있도록 제시하고자 한다.


예 1 : first_script
        #!/bin/sh
        # 나는 주석문이다.
        # sh가 거기 있어야 하므로 첫번째 줄을 고치지는 말라.
        echo "오늘은 `date`"
        echo "제 이름은 "$0
        echo "당신은 저에게 다음과 같은 "$#" 인수를 전달하셨습니다: "$*
        echo "첫번째 전달인수는 "$1
        echo "뭔가 감을 잡으셨습니까?"
예 2: 2exe
        #!/bin/sh
        echo "$1" 을 실행가능케 만들고 있습니다... "
        chmod u+x $1
예 3: backup
        #!/bin/sh
        echo "~/bak로 화일을 카피 중입니다"
        for name in $*
        do
          cp ${name} ~/bak
        done
예 4: fmta
        #!/bin/sh
        echo "오로지 루트만이 포맷할 수 있습니다"
        fdformat /dev/fd0H1440
        mkfs -t ext2 -c /dev/fd0H1440
        echo "디스크가 포맷되었습니다."
예 5: mnta
        #!/bin/sh
        echo "오로지 루트만이 마운트할 수 있습니다"
        mount -t msdos /dev/fd0 /mnt
        echo "작업을 마치고 나서 꼭 umount 하십시요."

6.2 여러분 혼자 C 를 배우기

리눅스에서 GW/BASIC 같은 것을 기대하지는 않을 것이다. 그렇지 않은가? 유닉스 계열에서 시스템 언어는 C 이며 C 를 사랑하기도 하고 C 를 미워하기도 한다. 다른 많은 언어들(포트란, 파스칼, LISP, 베이식... 하지만 터보 파스칼 같은 것은 없다 )이 또한 사용가능하다.

여러분이 C 를 안다고 가정하고 여기 터보 C++ 이나 다른 도스용 C 에 길들여져 있 을 여러분에게 몇 가지 사항에 대해 안내를 하고자 한다. 리눅스에서의 C 컴파일러는 gcc 이며 보통 도스용에서 볼 수 있는 그러한 화려한 면들은 없다. 통합환경(IDE), 온라인 도움말, 통합 디버거 등은 찾아볼 수 없다. 단지 투박한 명령행 방식의 컴파일러이지만 매우 강력하고 효율적이다. 여러분의 일반적인 hello.c 를 컴파일하기 위해서는 다음과 같이 한다.

        $ gcc hello.c
결과는 a.out 이라는 실행화일이다. 실행화일의 이름을 다르게 주기 위해서는
        $ gcc -o hola hello.c
라이브러리와 함께 프로그램을 링크하려면 -l<arg> 스위치를 붙인다. 예를 들어 수학 라이브러리를 링크하는 경우에는
        $ gcc -o mathprog mathprog.c -lm
(The -l<arg> switch forces gcc to link the library /usr/lib/lib<arg>.a; so ( -l<arg> 스위치는 gcc 로 하여금 /usr/lib/lib<arg>.a 를 링크하도록 명한다. 따라서 -lm 은 /usr/lib/libm.a 를 링크하게 된다 )

자그마한 프로그램에는 괜찮다. 하지만 여러 개의 소스로 구성된 프로그램을 만들 때는 make 유틸리티를 써야 할 것이다. 여러분이 수학식 파서(parser)를 만들었다 고 치자. 소스 화일의 이름은 parser.c 라고 하고 parse.h와 xy.h 2 개의 헤더 화일 을 포함한다고 치자. 여러분이 calc.c 라는 프로그램에서 parser.h 를 다시 포함하 고 parser.c 의 루팅을 이용하려고 할 것이다. 좀 복잡하긴 하다. calc.c 를 컴파 일하려면 어떤 일을 해야 하는가?

여러분은 makefile 이라는 것을 작성해야 한다. 그 makefile 은 소스와 오브젝트 화일과의 연관성을 말해준다. 예제를 보면,


        #  이것은 calc.c 를 컴파일하기 위한 makefile 이다.
        #  적절한 곳에서 <탭>키를 누르기 바란다.
        calc: calc.o parser.o
        <탭>gcc -o calc calc.o parser.o -lm
        # calc 는 calc.o, parser.so 이 2 개의 오브젝트 화일에 의존한다.
        calc.o: calc.c parser.h
        <탭>gcc -c calc.c
        # calc.o 은 2 개의 화일에 의존한다.
        parser.o:  parser.c parser.h xy.h
        <탭>gcc -c parser.c
        # parser.o 는 3 개의 화일에 의존한다.
        # makefile 의 끝
makefile 로 저장하고 컴파일하기 위하여 다음과 같이 실행한다.
        $ make
또는 calc.mak 라고 저장한 다음, 다음과 같이 한다.
        $ make -f calc.mak
물론 관련된 문서를 꼭 읽어보기 바란다. (RMP)
이것 말고도 여러분은 C 함수에 대한 도움을 그 즉시 얻을 수 있는데 다음과 같이
하면 된다. 예를 들어,
        $ man printf


다음 이전 차례