[펌] Shell programing

os/Linux 2004. 11. 26. 13:41 |
여러 개의 명령을 수행해야 하거나 긴 명령어를 수행할 때 는 일일이 typing을 하는것보다는 스크립트

   로 만들어놓고 실행하는 것이 훨씬 간편하다.

   쉘 스크립트는 쉘에서 사용하는 명령어들을 나열하여 파일로 저장하여 실행하는 것을 말한다.

   아래는 쉘 스크립트의 예이다.

 

    ========================

    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

  현재 사용자의 홈 디렉토리의 경로 정보를 가지고 있는 변수

$MAIL

  메일이 저장된 파일의 경로 정보를 가지고 있는 변수

$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) 참

Posted by 큰바우
: