re: 유닉스 쉘스크립트 작성좀 부탁드리겠습니다...

opensrc
답변채택률99.3%
2005.10.23 23:12
답변 추천하기

질문자 인사

너무 많은 도움이 되었습니다. 감사드립니다. ^^ 다음에도 모르는 것이 있으면 많이 도와주세요

1.

스크립트 하나 만들어봅니다.

아래 내용을 vi 에디터를 이용해서 화일을 만들고

chmod +x 화일명

으로 실행 권한을 준 후

./화일명 port

./화일명 maxthreadsperconn

./화일명 sizelimit

하면 실행됩니다.

#/bin/sh
./ldapsearch -h ndrtest01 -p 6005 -D "cn=root" -w Decjapan -b "cn=config" -s base "(objectclass=*)" nsslapd-$1 | grep ^nsslapd-$1
 
스크립트 내용을 간략히 설명하면,
$1 은 첫번째 parameter 입니다. 
| grep ^nsslapd-$1 은 | 앞의 결과 중 nsslapd-$1 으로 시작하는 라인 출력입니다.

 

2.

PATH 설정 방법

 

사용자 계정 디렉토리에 .profile 화일이 있습니다.

 

vi 로 열어보면

 

PATH=$HOME/.bin:$PATH:/usr/local/bin:/usr/sbin:.

 

와 같은 형식으로 path 설정이 되어 있는 부분이 있습니다.

 

이 부분에 명령어가 들어있는 디렉토리의 절대경로를 추가하고

 

다시 로그인 하면 PATH가 설정 됩니다. - 참고로 ksh 의 경우입니다.

 

PATH=$HOME/.bin:$PATH:/usr/local/bin:/usr/sbin:/export/home/mps/serverroot/shared/bin:.

 

csh을 사용한다면 .cshrc 화일을 수정하면 됩니다.

 

shell 의 종류마다 path 설정방법이 조금씩 다르니 참고하세요.

 

아래는 .cshrc 에서의 PATH 설정 예 입니다.

 

set path=(/bin /usr/bin /usr/X11R6/bin /usr/ucb /etc /usr/ccs/bin /usr/sbin /usr/local/mysql/bin /usr/local/bin /sbin ~/.bin .)

set path=(/bin /usr/bin /usr/X11R6/bin /usr/ucb /etc /usr/ccs/bin /usr/sbin /usr/local/mysql/bin /usr/local/bin /sbin ~/.bin /export/home/mps/serverroot/shared/bin .)

해당 글은 지식스폰서가 활동 기간 (04년~08년 6월 종료)중에 작성한 글 입니다.

 

 

 

유닉스 쉘(SHELL) 프로그래밍 정리 유닉스

2012/03/30 11:22

 

복사 http://blog.naver.com/jyhwan/150135265612

 

[쉘프로그램 실행]
  - . file => 현재 shell에서 file을 실행한다. 다른 프로세스를 만들지 않는다.
  - sh file => 본셀로 file을 실행한다. 다른 프로세스를 만는다.
  - file => file이 실행권한이 있을 때는 sh,csh,ksh 등을 사용하지 않아도 된다.
  - sh -n file => 명령을 읽기만 하고 수행하지 않는다.
  - sh -u file => 정의되어 있지 않은 변수를 검사한다.
  - sh -v file => shell 해석기에 읽어들여지는 각 행을 화면에 출력한다.
  - sh -x file => 구문오류를 점검한다.
  - sh -ux file
 
[첫줄과 주석]
  - #!/bin/sh
  - # 만든이 : 홍길동
 
[명령수행]
  - `command` or $(command)
 
[변수]
  - var="str" => 선언과 할당을 동시에 한다. "=" 사이에 공백이 있으면 안 된다.
  - ${var:-word} => var이 set되고 NOT NULL이면 var값을 출력하고, 그렇지 않으면 word의 값을 출력한다
  - unset var => 선언된 변수를 없애버린다.
  - echo $var => 변수 사용시 앞에 "$"를 붙인다.
  - echo ${var}123 => "str123"을 출력한다.
  - echo "var is : $var"
  - var=str; export var 또는 export var="str" => 자식 프로세스에게 상속할 수 있도록 var를 전역변수로 만든다.
 
[특수변수]
  - $? => 최종적으로 수행된 명령의 종료상태(0:성공)
  - $# => 프로그램에 전달되는 매개변수의 갯수
  - $! => 가장 최근에 백그라운드로 수행된 프로세스 번호
  - $$ => shell 해석기의 프로세스 번호
  - $* => $0을 제외한 모든 인수("arg1 arg2 arg3")
  - $@ => $0을 제외한 모든 인수("arg1" "arg2" "arg3")
  - $0 => 현재 수행되고 있는 프로세스 이름
  - $1 => 첫번째 인수
 
[이스케이프]
  - echo "\$var"
  - echo '$var' => 작은따옴표 안의 $var은 변수로 인식하지 않는다.
 
[제어구조]
  - if [ "$SHELL" = "/usr/bin/sh" ]
       then
          echo "your login shell is the bourne shell"
       else
          echo "your login shell is not bourne shell but $SHELL shell"
    fi
  - case $# in
       1) echo $1;;
       2) echo $1, $2;;
       *) break;
    esac
  - for param in $*
    do
       echo $param
    done
  - a=0
    while [ $a -lt 10 ]
    do
       a=`expr $a + 1`
       echo $a
    done
 
[함수]
  - #!/bin/sh
    # 함수선언
    add()
    {
       result=`expr $1 + $2`
       echo "$1 + $2 = $result"
    }
    # 함수사용
    add $1 $2
  - 함수는 앞에 선언되어야 한다.
 
[TEST 명령어]
  - 인수로 주어진 조건식의 진위 여부를 계산하여 그 값을 조건부 명령어에 사용한다.
    파일상태 조회, 문자열비교, 숫자비교 시 사용한다.
  - test -r file; echo $? => 파일을 읽을 수 있으면 참(0), 아니면 거짓(1)이다.
    -r : 읽기, -w : 쓰기, -x : 실행, -s : 파일크기, -f : 파일, -d : 디렉토리
  - test ""; echo $? => 문자열이 null이면 거짓(1) 리턴
  - test "str1" = "str2"; echo $? => 문자열이 같으면 참(0) 리턴
  - test 1 -eq 2; echo $? => 숫자가 같으면 참(0) 리턴
    -eq : 같으면, -ne : 같지않으면, -gt : 크면, -ge : 크거나 같으면, -lt : 작으면, -le : 작거나 같으면
  - test !\(-r file -a -f file\) => file이 읽을수 없거나 파일이 아니면 참(0)이다.(-a : and, -o : or)

2005/10/02 20:10

 

복사 http://einwind.blog.me/20017702011

 

변수 종류에 대해서 알아봤다. C COBOL 등의 프로그램에서 변수가 영향을 미치는 범위가 한정되어 있다. local 이냐 global 이냐에 따라 달라진다. 에서도 마찬가지다. 유닉스에서 변수가 하나의 에서 지정되면 다른 서브 에서는 변수명에 대해 액세스할 없게 된다. 다른 서브 에서 변수명을 사용하려면 상위 에서 export 해야만 한다.

사용자가 변수값을 변경하였거나 새로운 것을 만들었을 export 변수명1 변수명2 ...

같이 사용해야 변수에 대한 환경을 전달할 있다

 

다음 두개의 스크립트가 있다.(shell4, shell5)

/home/users/shell > cat shell4

echo 'Shell4 Shell script'               

echo 'x='$x                             

echo 'y='$y                             

x=2000                                  

y=3000                                  

echo 'x='$x                             

echo 'y='$y                              

export x y                              

sh shell5        

                       

/home/users/shell > cat shell5 

echo 'Shell5 Shell script'              

echo 'x='$x                             

echo 'y='$y                            

 

먼저 "export" 사용하지 않은 예를 보자.

/home/users/shell > x=100      

/home/users/shell > y=200      

/home/users/shell > sh shell4  

Shell4 Shell script                     

x=                      --> export 시키지 않았기 때문에 영향을 받지 않음.

y=                                       

x=2000                  --> x, y 지정.                

y=3000                                  

Shell5 Shell script                     

x=2000                                  

y=3000           

                       

/home/users/shell > echo $x $y

100 200                  --> 서브 빠져 나왔으니 기존에 setting 출력.    

 

"export" 시킨 .

/home/users/shell > x=100      

/home/users/shell > y=200   

/home/users/shell > export x y  

/home/users/shell > sh shell4   

Shell4 Shell script                      

x=100                    --> export 되었음.                 

y=200                                    

x=2000                                   

y=3000                                   

Shell5 Shell script                      

x=2000                                   

y=3000                                    

/home/users/shell > echo $x $y  

100 200                  --> 서브 나오면 기존의 값을 가짐.                                

"export" 것과 그렇지 않은 것의 구별이 되었는지...

 

이제 변수 값을 지정하고 치환하는 방법을 보자.

변수의 지정은 "변수=" 형식이라는 것은 앞에서 얘기했다. 변수를 사용하려면 변수명 앞에 "$" 붙혀 주어야 한다. 그리고 변수를 다른 변수의 값으로 사용할 있다.

 

변수1=${변수2} , 변수1=${변수2}추가문자

 

예를 보자.

/home/users/shell > dir=jeonjo

/home/users/shell > mkdir $dir       --> jeonjo 라는 디렉토리 생성

/home/users/shell > ls -l

drwxr-sr-x   2 root     test          512 Jun  1 11:56  jeonjo 

/home/users/shell > name=            

/home/users/shell > full_name=${name}   --> {} 붙여주는 이유는 ""

/home/users/shell > echo $full_name            구분짓기 위해서임.

조전                                         

 

변수를 치환해 보자.

${parameter} : 매개변수의 값이 있을 때는 값으로 변환된다.

/home/users/shell > x=abc         

/home/users/shell > y=${x}      

/home/users/shell > echo $y     

abc                                       

 

${parameter:-w} : parameter 값이 NULL 아닌 값이면 값이 해당식에 대입되고,

                                NULL이면 "w"값이 대치된다.

/home/users/shell > echo $z 

                              --> z 값이 NULL

/home/users/shell > y=${z:-abc}

/home/users/shell > echo $y  

abc                                     

 

${parameter:=w} : parameter 설정되어 있지 않거나 값이 NULL이면

                                "w" parameter 대입되고, 값이 해당식에 대입된다.

/home/users/shell > echo $z  

                              --> z 값이 NULL                                      

/home/users/shell > y=${z:=abc}

/home/users/shell > echo $z  

abc                                    

/home/users/shell > echo $y

abc

 

${parameter:?w} : parameter 설정되어 있거나 값이 NULL 아니면 해당 parameter

                                치환되고, 그렇지 않은 경우에는 "w" parameter 치환된다.

 

${parameter:+w} : parameter 설정되어 있거나 값이 NULL 아니면 해당 "w"

                                 parameter 대입된다.

 

위에서 언급한 것들은 문자열에 해당된다. 자료의 유형을 판단하거나 산술 연산 하지 못한다. 따라서 명령어형의 인수를 산술적으로 계산하려면 "expr" 사용해야 한다. 산술식이 부동 소수점형식이라면 앞에서 설명한 "bc" 사용해야 한다.

 

다음은 "expr"에서 사용될 있는 연산자이다.

산술 연산 : +, -, \*, /, %

비교 연산 : =, \>, \>=, \<, \<=, !=

일치 연산 : :

 

여기서 "\" 특별한 문자로 인식하는 것을 막기 위한 것이다.

다음은 문자열로 인식하는 예와 수식으로 인식하는 예이다.

/home/users/shell > x=100      

/home/users/shell > y=200      

/home/users/shell > echo $x+$y 

100+200

/home/users/shell > expr  $x  +  $y   --> "+,-,\*,/,%"  양쪽에 공백이 있어야 .

300

 

비교 연산자에서는 비교한 결과가 참이면 1, 거짓이면 0 return한다.

비교 연산자의 예는 생략한다.

 

마지막으로 일치 연산자를 살펴보자. 예를 보자.

/home/users/shell > name=abcdefg

/home/users/shell > expr "$name" : "abc"    

3                                  --> 3 문자가 일치한다.(첫문자부터)            

/home/users/shell > expr "$name" : "cde"    

0                                  --> 문자부터 비교하므로 일치 문자 없음.

/home/users/shell > expr "$name" : ".*"     

7                                  --> 변수 name 모든 문자 return

                                                                                         

 

+ Recent posts