본문 바로가기

Linux(OS)

Linux Shell Programming

1. 파일 입출력 관련 명령어1

#cat   

  :  cat [옵션] “파일이름

사용예 : #cat welcome

옵션   : -n  각 줄의 번호를 같이 출력

 

파일의 내용을 보여주는 명령어

 

#head

  :  head [옵션] “파일이름

사용예 : #head -5 exam

옵션   : -<라인수> 앞에서부터 라인수 만큼 출력

-n<라인수> 앞에서부터 라인수 만큼 출력

 

파일의 처음 부분을 출력하여 보여주는 명령어. 옵션을 주지 않으면 기본값으로 10라인까지 출력.

 

#tail

  :  tail [옵션] “파일이름

사용예 : #tail -5 exam

옵션   : -<라인수> 파일의 끝부분부터 라인수 만큼 출력

        +<라인수> 파일의 처음 라인수 부분부터 끝까지 출력

-f     파일의 끝부분에 추가되는 부분을 계속해서 표시

 

파일의 끝 부분을 출력하여 보여주는 명령어. 옵션을 주지 않으면 기본값으로 10라인까지 출력.

 

#cut

  :  cut [옵션] “파일이름

사용예 : #cut –c 2-4 sample

옵션   : -c  문자수로 열을 계산해서 출력하다.

-d <구분자> 필드 구분자를 사용한다.

-f <구분자> 파일 내의 필드로 따져서 추출한다.

 

특정 필드를 추출하는 명령어.

 

#cat sample

홍경래 28 011-222-2222 서울 강남구

박혁거세 34 010-333-3333 경기도 부천시

임꺽정 23 109-444-4444 충남 대전시

홍길동 19 011-555-5555 경기도 성남시

이몽룡 16 011-666-6666 경이고 의정부시

 

#cut –c 12-17 sample

#cut –d “” –f 1,3 sample

#cut –d : -f 1,3-4 /etc/passwd | tail -5

 첫번째 필드와 세번째부터 네번째 필드

 

#paste

  :  paste [옵션] “파일이름” “파일이름

사용예 : #paste –d : exam2 exam3

옵션   : -s 한 파일의 내용을 한 줄로 보여준 후 다른 파일의 내용을 한줄로 덧붙인다.

-d 출력되는 내용의 구분자를 지정한다.

 

여러 파일의 내용을 하나로 합쳐서 출력하는 명령어.

이때 각 구분자는 기본값으로 Tab 이며, -d 옵션으로 구분자를  변경 할수 있음.

#cat exam2

red

blue

 

#cat exam3

yellow

green

 

#paste exam2 exam3

red     yellow

blue    green

 

#paste –d : exam2 exam3

red:yellow

blue:green

 

#paste –s –d “|” exam2 exam3

red|blue

yellow|green

 

#diff

  :  diff [옵션] “파일이름” “파일이름

사용예 : #diff exam2 exam4

옵션   : -b Space를 무시하고 비교한다.

-q 파일이 서로 다른 경우, 다르다는 메시지만 출력한다.

 

파일의 내용을 비교하여, 서로 다른 행을 출력하는 명령어. 누군가가 파일의 내용을 변경한 경우 변경된 파일을 알아볼 때 사용

#cat exam2

red

blue

#cat exam4

red

green

blue

 

#diff exam2 exam4

 

#clear

#clear

화면을 깨끗하게 지울 때 사용

 

2. 파일 입출력 관련 명령어 ii

 

#grep

  :  grep [옵션] [패턴]  파일이름

사용예 : #grep 서울 sample

옵션   : -v ‘패턴을 포함하지 않는 행을 출력

-i  대소문자를 구분하지 않는다.

-n 줄번호를 함께 출력한다.

-l  파일명을 출력한다.

 

grep 는 특정 단어나 문장을 포함하는 파일을 찾을 때 사용.

#grep white *

현재 디렉토리의 모든 파일(*)의 내용중에 white라는 단어가 있는 라인 출력

 

대소문자 구분없이 찾기 위해서는 –i

 

#cat –i pink –n *

 

패턴을 좀더 정교하게 표현하려면 regular expression을 사용해야 한다]

^      : ^
패턴            : 패턴으로 시작하는 모든 라인 찾기

$      :
패턴$           : 패턴으로 끝나는 모든 라인 찾기
.       : d...              : d
로 시작하는 4자리 character 찾기
*      : [a-d]*          : a, b, c, d
로 시작하는 character 찾기
[]    : [Dd]atabase  : Database
또는 database 찾기
[^]   : [^D]             : D
가 나타나지 않는 라인 찾기

OS/tdir] grep -i ^the ~/tdir/*              # the
로 시작하는 라인 찾기
OS/tdir] grep -i meal.$ ~/tdir/*          # meal.
으로 끝나는 라인 찾기
OS/tdir] grep c...d ~/tdir/*                # c
로 시작하고 d로 끝나는 5자리 character 찾기

 

[패턴]

 

형식      사용예        설명

[abc]     grep [abc]*   a b, 혹은 c가 있는 라인.

[0-9]    grep [0-9] *   0 부터 9 가 있는 라인

[A-C]    grep [A-C] *   A,B,C 가 있는 라인

‘^pattern’  ls –l /etc/ | grep ‘^d’    /etc/ 서브디렉토리를 출력

‘pattern$’    ls –l /etc/ | grep ‘c$’  /etc/ 디렉토리 밑에서 c로 끝나는 파일 및 디렉토리 출력

 

 

#sort

  :  sort [옵션] “파일이름

사용예 : #sort –k2 –r sample

옵션   : -f 대소문자를 구분하지 않는다.

-r 내림차순으로 정렬

-b Space를 무시한다.

-k 필드 번호를 나타낸다.

-t <구분자> 필드 구분자로 <구분자>를 사용한다.

        -n 숫자 순서로 정렬.

 

sort는 데이터 파일에서 필드(컬럼)를 추출하는 명령어. sort에 옵션이 없을 경우 기준은 오름차순.

#cat sample

홍경래 28 011-222-2222 서울 강남구

박혁거세 34 010-333-3333 경기도 부천시

임꺽정 23 109-444-4444 충남 대전시

홍길동 19 011-555-5555 경기도 성남시

이몽룡 16 011-666-6666 경이고 의정부시

 

#cat –k3 sample   : 핸드폰 번호 순서대로 출력

 

나이가 많은 연장자부터 순서데로 정렬하여 다른 파일에 저장.

#sort –k2 –r sample > sample2

 

-t 옵션은 필드 구분자를 지정하여 주는 역할

#sort –t : -k3 –n –r /etc/passwd/ | head

/etc/passwd  파일을 구분자를 “:”로 해서, 세번째 필드 UID를 기준으로 숫자를 (-n) , 내림차순(-r) 으로 정렬한후, 위에서부터 10라인까지만 출력.

#sed

  :  sed [옵션] “파일이름

사용예 : #sed ‘s/01/82-1/g’ sample

옵션   : p 행을 출력한다. –n 옵션과 함께 사용할 경우 선택된 행만 출력

d  선택한 행을 삭제한다.

-f  파일 안의 내용을 실행한다.

-k 필드 번호를 나타낸다.

‘s///g’  가 문자열을 문자열로 대체한다.

        -e 다중 편집을 한다.

        -q sed를 종료한다.

 

sed stream editor에서 유래한 명령어로서, 문자 스트림으로 나타나는 입력을 수정하거나 편집하는 일종의 편집기 입니다. 즉 화면으로 출력되는 내용을 필터링하여 보여주는 역할을 함.

p 옵션은 원하는 내용을 출력 할 때 사용.

 

 011 핸드폰을 사용하는 사람들을 추출하기 위해서 ‘/011/p’ 라는 옵션 사용.

-n 과 같이 사용하지 않는다면 원하는 내용이 두번씩 출력됨.

 

#sed –n ‘/011/p’ sample

 

#sed ‘1,3d’ sample   1번 라인부터 3번 라인까지 삭제하고 출력

 

‘$’ 는 파일의 마지막 라인 나타냅니다.

#sed ‘5, $d’ sample  : 5라인부터 파일의 끝까지 삭제하고 그 이전의 라인만 출력.

 

#sed ‘4q’ sample   :  4라인까지만 출력하고 종료

 

#sed ‘/서울/d’ sample   :  서울 이라는 특정 문자열 이 포함된 라인을 제외하고 출력.

 

특정 문자열 대체

#sed ‘s/file/FILE/g’ sample2

 

만약 file 이라는 단어만 FILE로 변경하고자 한다면 원하는 단어를 ‘< >’ 로 묶어줌.

#sed ‘s/\<file\>/FILE/g’ sample2

 

라인의 일부분만을 변경하여 출력

#sed ‘1,6s/서울시/서울특별시/g’ sample

 

변경된 라인만 출력하려 할때는 –n 옵션과 끝부분으 gp 로 하면 됨.

#sed –n ‘1,6s/서울시/서울특별시/gp’ sample

 

-e 옵션은 다중 편집 입니다..sed 명령어를 중복해서 사용한다는 의미.

#sed –e ‘s/서울시/서울특별시/g’ –e ‘s/충남/충청남도/g’ sample

 

#awk

특정 패턴의 조작이나 검색을 주목적으로 하고 있는 프로그래밍 언어.

A.V.Aho,   P.J.Weinberger, B.Kernigham 의 머리글자.

awk는 파일의 각 라인을 필드로 인식하여 이들 필드 및 컬럼을 조작하므로 이를 응용하여 간단한 데이터베이스 관리까지 가능함.

 

awk ‘패턴’ ‘{action} ‘ “파일이름

 

패턴: BEGIN – 특정 명령을 실행하기 전에 먼저 실행시킨다.

    END   - 특정 명령을 실행한후 제시되는 문장을 실행 시킨다.

   /정규표현식/ - 정규표현식의 패턴을 포함하는 라인에서 문장을 실행시킨다.

패턴1 && 패턴2 – 패턴1 이나 패턴2 중 하나만 만족시켜도 문장을 실행시킨다.

!패턴   - 패턴과 일치 하지 않을 겨우 문장을 실행시킨다.

 

awk : 패턴 검색과 처리를 위한 언어

=>
명령어의 이름은 개발자인 Alfred V. Aho, Peter J. Weinberger, Brian W. Kernighan 3인의

    
머리글자를 사용해서 만든 것이다.

  awk '{ action}' filename

OS/tdir] ls -l | awk '{print $0}'              #
전체 필드가 모두 나타나도록...

drwxr-xr-x   2   prof9i4  dba          512  4
   25
  15:44   a_dir
drwxr-xr-x   2   prof9i4  dba          512  4
   18
  23:53   b_dir

     $1     $2     $3   $4      $5  $6   $7     $8    $9    $0                                            

OS/tdir] ls -l | awk '{print $1}'                    # 1
번 필드만 나타도록...
OS/tdir] ls -l | awk '{print $1, $9}'               # 1
번과 9번 필드만 나타나도록
...
OS/tdir] ls -l | awk '{print $3 "\t" $4 "\t" $9}'                # Tab
키가 적용된 결과
...
OS/tdir] ls -lt | awk '{print $9, "is using", $5, "bytes"}'     # text
추가

OS/tdir] ls -lt | awk '$5 <= 200 {print $0}'   # 5
번 필드가 200 이하일 경우 출력

 

Bash Shell

- 쉘은 사용자와 리눅스를 연결시켜주는 일종의 유틸리티 프로그램입니다.

리눅스 운영체제를 사용하는  사람은 기본적으로 하나 이상의 쉘을 사용합니다.

 

자신의 쉘 확인

#echo $SHELL

 

- 쉘의 종류

1)Borune Shell(sh)

 - 1979, Bell 연구소의 Steven Bourne이 개발한 쉘.

 

2) C Shell(csh)

- 버클리대학 Bill Joy개발, C 언어와 유사한 점이 많음.

3)korn Shell(ksh)

AT&T 회사의 David Korn이 개발,  Bourne Shell의 기능들을 확장한 쉘.

Bourne Shell과의 호환성이 좋으며, C shell 기능도 제공.

 

4) Bourne Agine Shell(bash)

Bourne Shell 기능을 추가 발전시킨 쉘이며, C shell, korn Shell에서 제공하는 기능들도 어느 정도 포함하고 있음.

 

5) TC Shell(tcsh)

- 1980 ken Greer 등이 C Shell을 확장시켜 제작.

 

--- 쉘 프로그래밍은 리눅스를 다루는 사람의 작업을 보다 편리하고, 효율적으로 하기 위해 많이 사용.

-- 관리자가 각 계정의 자료들을 정규적을 백업, 웹 호스팅 서버에 계정의 추가 작업을 쉽게

하기 위해여 쉘 스크립트

 

------------------쉘 작성-----------

 

스크립트 파일 작성은 가장 위의 첫 라인에서 #!/bin/bash 로 시작

주석이 아니라 쉘의 지정임.

 

#ls –al /bin | grep sh

 

sh bash의 심볼릭 링크임.

#!/bin/bash   #!/bin/sh 나 같은 의미 임.

 

1) 스크립트 파일의 실행 방법

 - sh 명령어 (sh “스크립트 파일이름”)

 - 퍼미션 변경후 실행(chmod)

 

#cat runfile

#!/bin/bash

echo “Hi….^^”

 

#ls –l

#sh runfile

 

#chmod 755 runfile

#ls –l

#./runfile

 

2) echo :  기본 출력

echo는 화면에 원하는 문자열을 출력 시킴.

#!/bin/bash

echo “ This is s shell script file!!”

 

#!/bin/bash

echo “Red”

echo “Blue”

 

자동 줄바꿈 됨. 이것을 방지 할려면 echo –n “Red”

 

역따옴표(`) 를 사용하면 명령어의 결과를 출력 할 수도 있음.

#!/bin/bash

echo `ifconfig | grep inet | grep –v 127.0.0.1`

 

2) 변수 만들고 사용하기

형식: 변수명=변수값

사용예: korea=”Beaituful”

적용예: echo $korea

주의점: 변수명 다음에 오는’=’의 좌우로 공백이 있으면 안됨.

 

- 변수 안에 또 다른 변수를 넣을 수도 있음

#!/bin/bash

color=red

say=”this color is $color”

 

echo $say

 

- 환경변수 : export 명령 사용   /etc/profile

3) read 사용

- 사용자의 표준입력을 받아들여 변수로 저장하는 역할.

 

#cat –n readsh

#!/bin/bash

echo –n “age : “

read x

echo “You are $x years old”

 

3) argument

#cat –n argumentsh

#!/bin/bash

 

echo “argument1:$1”

echo “argument2:$2”

echo “argument3:$3”

 

#sh  arguemntsh red blue yellow

 

#!/bin/bash

 

echo “argument1:$1”

echo “argument2:$2”

echo “argument3:$3”

echo “Total argument number : $#”

echo “This is File Name : $0

 

 

 

$# argument의 전체 개수

$0 은 스크립트 파일 이름.

 

 기본 문법

1) 크기비교

 

[$A –gt $B] :  A 값이 B값보다 크다.

[$A –lt $B] :  A 값이 B값보다 작다.

[$A –ge $B] :  A 값이 B값보다 크거나 같다.

[$A –le $B] :  A 값이 B값보다 작거나 같다.

[$A –eq $B] :  A 값이 B값이 같다.

[$A –ne $B] :  A 값이 B값이 다르다.

 

#cat –n number

A=8

B=5

if [$A –eq $B] #만약 A B가 같다면

then

echo “$A is equal to $B”

elif [$A –gt $B] #만약 A B 보다 크다면

then

echo “$A is greater then $B”

elif [ $A –lt $B] # 만약 A B보다 작다면

then

echo “$A is less then $B”

fi

 

#sh number

 

#!/bin/bash

echo –n “A : “

read A

 

echo –n “B : “

read B

…………..

 

#sh number 9 6

 

2)숫자 계산

expr  : 숫자 연산을 할 때 사용.

 

#cat –n expr1

#!/bin/bash

num=`expr 3 + 4 – 5 `

echo $num

 

#cat –n expr2

#!/bin/bash

num=`expr  \(3 \* 5 \) / 4 +7 `

echo $num

 

주의점: 역따옴표(`) 를 사용

       * 연사자와 괄호( ) 앞에는 역슬래시 \ 를 붙인다.

       모든 연산자와 숫자, 변수 , 기호 사이에는 Space 가 있어야 한다.

 

#cat –n sp

#!/bin/bash

A=linux

echo “1. \$A 의 값은 $A 이다

echo “2. \$A 의 값은 $$A 이다

echo “3. \$A 의 값은 $$$A 이다

echo “4. \$A 의 값은 ‘$A’ 이다

echo “5. \$A 의 값은 “$A” 이다

 

- 역슬래시 바로 다음에 오는 문자 하나는 특수한 의미가 없어지고 일반 문자처럼 인식

- ‘$$’ 는 스크립트 파일이 실행되는 프로세스 번호

$$ 다음에 오는 A  그냥 문자 A, $$$A $$ 프로세스 번호 인식 한후 $A 인식

‘ ‘ 작은 따옴표는 그 자체가 문자.

“” 큰 따옴표는 그 안에 있는 문자를 문자 그대로 보호.

 

3) 문자열 비교

[“String1”=”String2”] 두 문자열이 같은 경우

[“String1”!=”String2”] 두 문자열이 다른 경우

[-z “String”]  문자열의 길이가 0 인 경우

[-n “String”]  문자열의 길이가  0 이 아닌 경우

 

#cat –n string1

#!/bin/bash

if [ H$1 = “Hyes” ]

then

  echo “argument is yes”

else

 echo “argument is not yes”

fi

#sh string1 yes

 

$1 yes 앞에 H 라는 임의의 문자를 붙이지 않는다면 argument 값을 넣지 않을 경우 에러발생.

 

4) 파일 다루기

[-f 파일명]   파일이 있는 경우

[-s 파일명]  파일이 존재하고 내용이 있는 경우

[-d 파일명] 파일이 아니고 디렉토리인 경우

[-r 파일명] 읽기가 가능한 파일인 경우

[-w 파일명] 쓰기가 가능한 파일인 경우

[-x 파일명] 파일이 존재하고 실행 가능한 경우

[! –옵션 파일명] 옵션이 조건이 아닐 경우

 

#!/bin/bash

xfer=/var/log/xferlog

if [ -s $xfer ]

then

   tail $xfer

fi

 

5) 조건문

주의점: [  앞뒤] 의 앞에는 Space 공간이 있어야 한다.

 

if 문의 형식 I

 if [ 조건문]

 then

……..

fi

 

#!/bin/bash

if [ 7 –gt 3 ]

 then

    echo “ 7 3보다 크다

fi

 

if 문의 형식 II

 if [ 조건문]

 then

……..

else

if [ 조건문]

then

 

else

 

fi

 

elif  => else; if 문장

 

6) 관계연산자

관계연산자   의미

-a            and

-o            or

 

#!/bin/bash

 

echo  -n “input 1,2 or  3 : “

read num

if [ \( $num –lt 1 \) –o \( $num –gt 3 \) ]

then

       echo “허용된 범위의 숫자가 아닙니다

       exit

else

       if  [ $num  -eq 1 ]

      then

           echo “하나

     elif [ $num –eq 2 ]

     then

           echo “

     elif  [ $num –eq 3 ]

      then

        echo “

   fi

fi

 

7) for

형식: for 변수명 in 변수값1 변수값2 변수값3 …

     do

        …..

    done

 

#!/bin/bash

for Ghost in the shell is Anination

do

         echo $Ghost

done

 

#!/bin/bash

A=`ls /etc/`

for B in `echo $A`

do

         echo “Linux Shell Script”

done

 

8) while

형식: while [ 조건문 ]

     do

       …………

     done

 

#!/bin/bash

while [ : ]

do

         echo –n “Linux”

done

 

---------구구단

#!/bin/bash

echo –n “Dan : “

read num

 

echo “”

echo “ $num Dan”

echo “=======”

 

A=1

while [ $A –lt 10 ]

do

         answer=`expr $num \* $A`

         echo “$num X $A = $answer”

         A=`expr $A + 1`

done

 

9) until

형식: until [ 조건문 ]

      do

      ……

     done

 

while문과 반대로 조건문이 거짓이면 do done 사이의 명령어들을 실행하고, 조건문이면 루프를 끝냅니다.

 

#!/bin/bash

echo “”

until [ “$A” = “end” ]

do

         echo –n “IF you exit this scrit, Type \”end\” : “

        read A

         echo $A

done

 

10) case

 형식: case 변수 in

   패턴1)

      스크립트;;

   패턴2)

     스크립트;;

   *)

     스크립트;;

 esac

 

case문은 변수의 값을 받아들여서, 이값에 따라 각각 다른 스크립트들을 실행할 때 사용함.

리눅스 쉘 스크립트 파일에서 가장 많이 사용되는 조건문

/etc/rc.d/init.d 디렉토리 안에 있는 대부분의 스크립트 파일들이 case

주의점:  패턴의 각 항목을 마칠때는 ;; 문을 사용한다.

        wildcard(*) 를 사용할 경우는 각 패턴의 마지막에 사용한다.

        ‘|’ 를 사용하여 여러 개의 패턴을 사용 할수 있다.

 

#!/bin/bash

echo –n “Are you Korean? (y|n) : “

read A

 

case “$A” in

 y|Y)

         echo “you ar korean.”

exit;;

n|N)

         echo “where are you from?”

         exit;;

*)

         echo “Huk..--;”

         exit;;

esac

 

 

#!/bin/bash

echo “

    [1] network restart

    [2] DNS restart

    [3] SendMail restart

   

echo –n “Select Number : “

read Num

 

case $Num  in

  1)

    /etc/rc.d/init.d/network restart;;

 2)

/etc/rc.d/init.d/named restart;;

3)

/etc/rc.d/init.d/sendmail restart;;

*)

   echo “Select {1|2|3}”;;

esac

 

 

11) continue, break

 continue break 문은 자주 사용되지 않지만 , 사용 방법은 다른 프로그래밍 언어와 유사함.

 

#!/bin/bash

while :

do

         echo –n “ls –l 을 치세요 : “

         read A

         if [ “$A” != “ls –l” ]

         then

         continue

         else

            ls –l

         break

         fi

done

 

 

12) 사용자 정의 함수

 형식: 함수명()

         {

         ….

         }

 

#!/bin/bash

Gugu()

{

echo “    $1  

echo “=========”

num=1

while [ $num –lt 10 ]

do

       answer=`expr $1 \* $num`

       if  [ $answer –lt 10 ] ;then

         answer=”  $answer”

     fi

echo “$1 X $num = $answer”

num=`expr $num + 1`

done

echo “”

}

 

Gugu 3

Gugu 5

Gugu 7

 

 

 

 

13) ANSI Escape Code

ANSI American National Standsrds Institute(미국표준협회)

- 화면상의 커서의 움직임이나 키보드의 역할 등을 제어하는 ANSI Escape Code 개발

- ANSI Escape Code 를 이용하여 화면을 제어하거나, 글자색이나 바탕색을 지정할 수 있습니다.

화면을 제어한다는 것은 커서의 위치를 이동시킨다거나, clear 명령어와 같이 화면을 지우거나, 혹은 특정 부분의 문자를 삭제하는 등의 작업.

최근에는 ANSI Escape Code를 이용하여 화면 제어하는 작업은 거의 하지 않음.

 화면의 색을 지정하는 내용이 많음.

 

화면 색 지정 형식

^[[숫자m

 

^[ => Ctrl +v 치고나서 Ctrl+Esc

또는 Ctrl+v , Ctrl+[

 

 

색상             글자색 코드                 배경색 코드

검정색(회색)     30                                   40

빨간색          31                            41

초록색          32                            42

갈색            33                            43

파란색          34                            44

보라색          35                            45

하늘색          36                            46

회색            37                            47

기본화면색   0

bold intensity   1

역상            7

 

#!/bin/bash

echo “^[[31m 안녕하세요 ^[[0m”

 

 

 

#echo $PS1

[\u@\n \w]\$

\d: “요일 월 일형식으로 표시

\h : 첫번째 “.”  까지의 호스트 이름

\H : 전체 호스트 이름

\n : 다음 줄로 바꾸기

\t : HH:MM:SS 형식의 24시간 표시

\T : HH:MM:SS 형식의 12시간 표시

\u : 현재 계정의 username

\w : 계정의 홈디렉토리를 기준으로 전체 경로 표시

\W :  현재 작업 디렉토리만 출력

 

.bashrc .bash_profile  파일의 마지막에

PS1=”^[[36m\T ^[[33m[\u@\h \w]\n^[[0m\$ “

export PS1

 

 

리눅스에 telnet으로 접속하면  로그인하기 전의 메시지는 /etc/issue.net 파일 안의

내용이 출력됩니다.

만약 로컬에서 바로 접속했다면 /etc/issue 파일안의 내용 츨력.

 

 

예제)

삼각형 : 11

 

 

 

 

}

 

 

 

메시지 박스(msgbox)

  메시지 박스는 간단한 인사말이나 안내문, 정보를 출력할 때 사용.

#!/bin/sh

DIALOG=${DIALOG=dialog}

 

$DIALOG --title “MESSAGE BOX” --clear \

         --msgbox “ Hi, this is simple message box. \

          you press the ENTER key.” 10 41

 

case $? in

  0)

     echo “ok”;;

  255)

   echo ‘Esc pressed.”;;

esac

 

 

쉘스크립트도  GUI그래픽 인터페이스 표현이 어느정도 가능하다.
/usr/share/doc/dialog-~~~/samples/
디렉토리에는 GUI 방식으로 실행되는 쉘 스크립트 예제파일들이 있습니다. 이 장애서는 리눅스에서 지원하는 GUI 방식의 기본적인 스크립트 예제파일들을 분석해보자.

메세지박스(msgbox)
--msgbox       <text> <height> <width>

#!/bin/sh
# $Id: msgbox,v 1.3 2003/08/15 19:40:37 tom Exp $
: ${DIALOG=dialog}

$DIALOG --title "MESSAGE BOX" --clear \
        --msgbox "Hi, this is a simple message box. You can use this to \
                  display any message you like. The box will remain until \
                  you press the ENTER key
." 10 41

case $? in
  0)
    echo "OK";;
  255)
    echo "ESC pressed.";;
esac

- dialog
는 일반적으로 /usr/bin/dialog에 위치하고 있으며, /usr/bin 디렉토리는 PATH가 지정되어 있으므로 3 라인에서와 같이 전체 경로를 사용하지 않고서도 변수로 지정할수 있다.  --title 옵션으로 메시지 박스의 상단에 나타나는 제목을 출력할수 있다, --clear 옵션은 다이얼로그 박스를 종료했을 경우 화면을 clear 하는 옵션 문장 맨 뒤 '\'표시를 사용하였으므로 리눅스가 해석할 때는 하나의 라인으로 인식하게 됩니다.
--msgbox
옵션으로 출력하고자 하는 내용을 입력하면 됨, 10 41 은 메시지 박스의 세로와 가로의 길이를 나타낸다.
case
문에서 $?를 통하여 사용자가 입력한 값을 구분하고 처리한다. 만약 메시지창에서 ok를 선택하였다면 $?의 값은 0으로 받아들이고 ESC 키를 누르면 255로 인식한다.

인포박스(infobox)
--infobox      <text> <height> <width>

     1  #! /bin/sh
     2  # $Id: infobox,v 1.5 2003/08/15 19:40:37 tom Exp $
     3  : ${DIALOG=dialog}
     4
     5  left=10
     6  unit="seconds"
     7  while test $left != 0
     8  do
     9
    10  $DIALOG --sleep 1 \
    11          --title "INFO BOX" \
    12          --infobox "Hi, this is an information box. It is
    13  different from a message box: it will
    14  not pause waiting for input after displaying
    15  the message. The pause here is only introduced
    16  by the sleep command within dialog.
    17  You have $left $unit to read this...
" 10 52
    18  left=`expr $left - 1`
    19  test $left = 1 && unit="second"
    20  done
-
메시지박스와 유사하지만 보다 더 많은 내용의 정보를 출력할 때 유용합니다.
- 7
라인에 조건문 2가지 효현방식중 test 조건문이 사용하고 있다.
-
옵션 --sleep 옵션으로 1초씩 멈추면서 실행하고 있다.

텍스트박스(textbox)
--textbox      <file> <height> <width>

     1  #!/bin/sh
     2  # $Id: textbox,v 1.6 2003/08/15 19:40:37 tom Exp $
     3  : ${DIALOG=dialog}
     4
     5  tempfile=`tempfile 2>/dev/null` || tempfile=/tmp/test$$
     6  trap "rm -f $tempfile" 0 1 2 5 15
     7
     8  cat << EOF > $tempfile
     9  Hi, this is a text dialog box. It can be used to display text from a file.
    10  The file should not contain any 'tab' characters, so you should 'expand'
    11  the file first if it contains 'tab' characters.
    12
    13  It's like a simple text file viewer, with these keys implemented:
    14
    15  PGDN/SPACE     - Move down one page
    16  PGUP/'b'       - Move up one page
    17  ENTER/DOWN/'j' - Move down one line
    18  UP/'k'         - Move up one line
    19  LEFT/'h'       - Scroll left
    20  RIGHT/'l'      - Scroll right
    21  '0'            - Move to beginning of line
    22  HOME/'g'       - Move to beginning of file
    23  END/'G'        - Move to end of file
    24  '/'            - Forward search
    25  '?'            - Backward search
    26  'n'            - Repeat last search (forward)
    27  'N'            - Repeat last search (backward)
    28
    29
    30  The following is a sample text file:
    31
    32
    33  EOF
    34
    35  TEXT=/usr/share/common-licenses/GPL
    36  test -f $TEXT || TEXT=../COPYING
    37
    38  cat $TEXT | expand >> $tempfile
    39
    40  $DIALOG --clear --title "TEXT BOX" --textbox "$tempfile" 22 77
    41
    42  case $? in
    43    0)
    44      echo "OK";;
    45    255)
    46      echo "ESC pressed.";;
    47  esac

-
인포박스보다 더 많은 내용을 출력할 때 사용한다.
- 5
번줄   5  tempfile=`tempfile 2>/dev/null` || tempfile=/tmp/test$$
   $$
표시는 스크립트 파일이 실행할 때의 프로세스PID 값이다. 임시 파일을 만든다.
   0 - stdin
   1 - stdout
   2 - strerr
   3 - stdprn
- 6
  trap "rm -f $tempfile" 0 1 2 5 15
  trap
은 시그널 핸들러로서 쉘 스크립트 파일을 실행 중에 발생하는 interrupt의 시그널 값으로 원하는 작없을 실행하는데 사용 합니다.
 
형식 : trap [실행할 명령어] [시그널 번호]
- 8
  cat << EOF > $tempfile
  cat
명령어를 사용하여 파일을 만들고 파일의 내용까지 넣는 작업 EOF End Of File로서 파일의 마지막 부분임을 나타낸다.

인풋박스(inputbox)
--inputbox     <text> <height> <width> [<init>
     1  #!/bin/sh
     2  # $Id: inputbox,v 1.6 2003/08/15 19:40:37 tom Exp $
     3  : ${DIALOG=dialog}
     4
     5  tempfile=`tempfile 2>/dev/null` || tempfile=/tmp/test$$
     6  trap "rm -f $tempfile" 0 1 2 5 15
     7
     8  $DIALOG --title "INPUT BOX" --clear \
     9          --inputbox "Hi, this is an input dialog box. You can use \n
    10  this to ask questions that require the user \n
    11  to input a string as the answer. You can \n
    12  input strings of length longer than the \n
    13  width of the input box, in that case, the \n
    14  input field will be automatically scrolled. \n
    15  You can use BACKSPACE to correct errors. \n\n
    16  Try entering your name below:
" 16 51 2> $tempfile
    17
    18  retval=$?
    19
    20  case $retval in
    21    0)
    22      echo "Input string is `cat $tempfile`";;
    23    1)
    24      echo "Cancel pressed.";;
    25    255)
    26      if test -s $tempfile ; then
    27        cat $tempfile
    28      else
    29        echo "ESC pressed."
    30      fi
    31      ;;
    32  esac

-
라인변경은 \n
- 16
번줄은 인풋박스의 세로, 가로, 그리고 사용자입력창의 높이, 사용자로부터 입력받은 값을 $tempfile로 저장하는 것을 볼 수 있다.
- case
문에서 반환값이 1인경우는, 사용자가 Cancel 버튼을 선택하였을 때 발생한다.

패스워드(password)
--passwordbox  <text> <height> <width> [<init>]

     1  #!/bin/sh
     2  # $Id: password,v 1.2 2003/08/15 19:40:37 tom Exp $
     3  : ${DIALOG=dialog}
     4
     5  tempfile=`tempfile 2>/dev/null` || tempfile=/tmp/test$$
     6  trap "rm -f $tempfile" 0 1 2 5 15
     7
     8  $DIALOG --title "INPUT BOX" --clear \
     9          --passwordbox "Hi, this is an password dialog box. You can use \n
    10  this to ask questions that require the user \n
    11  to input a string as the answer. You can \n
    12  input strings of length longer than the \n
    13  width of the input box, in that case, the \n
    14  input field will be automatically scrolled. \n
    15  You can use BACKSPACE to correct errors. \n\n
    16  Try entering your name below:
" 16 51 2> $tempfile
    17
    18  retval=$?
    19
    20  case $retval in
    21    0)
    22      echo "Input string is `cat $tempfile`";;
    23    1)
    24      echo "Cancel pressed.";;
    25    255)
    26      if test -s $tempfile ; then
    27        cat $tempfile
    28      else
    29        echo "ESC pressed."
    30      fi
    31      ;;
    32  esac

-
입력시 안보이게 해주는 뿐 인풋박스의 예제와 동일

예스노우(yesno)
--yesno        <text> <height> <width>

     1  #!/bin/sh
     2  # $Id: yesno,v 1.3 2003/08/15 19:40:37 tom Exp $
     3  : ${DIALOG=dialog}
     4
     5  $DIALOG --title "YES/NO BOX" --clear \
     6          --yesno "Hi, this is a yes/no dialog box. You can use this to ask \
     7                   questions that have an answer of either yes or no. \
     8                   BTW, do you notice that long lines will be automatically \
     9                   wrapped around so that they can fit in the box? You can \
    10                   also control line breaking explicitly by inserting \
    11                   'backslash n' at any place you like, but in this case, \
    12                   auto wrap around will be disabled and you will have to \
    13                   control line breaking yourself.
" 15 61
    14
    15  case $? in
    16    0)
    17      echo "Yes chosen.";;
    18    1)
    19      echo "No chosen.";;
    20    255)
    21      echo "ESC pressed.";;
    22  esac
- Yes
No를 선택할 수 있게 한다.

메뉴박스(menubox)
--menu         <text> <height> <width> <menu height> <tag1> <item1>...

     1  #!/bin/sh
     2  # $Id: menubox,v 1.4 2003/08/15 19:40:37 tom Exp $
     3  : ${DIALOG=dialog}
     4
     5  tempfile=`tempfile 2>/dev/null` || tempfile=/tmp/test$$
     6  trap "rm -f $tempfile" 0 1 2 5 15
     7
     8  $DIALOG --clear --title "MENU BOX" \
     9          --menu "Hi, this is a menu box. You can use this to \n\
    10  present a list of choices for the user to \n\
    11  choose. If there are more items than can fit \n\
    12  on the screen, the menu will be scrolled. \n\
    13  You can use the UP/DOWN arrow keys, the first \n\
    14  letter of the choice as a hot key, or the \n\
    15  number keys 1-9 to choose an option.\n\
    16  Try it now!\n\n\
    17            Choose the OS you like:
" 20 51 4 \
    18          "Linux"  "The Great Unix Clone for 386/486" \
    19          "NetBSD" "Another free Unix Clone for 386/486" \
    20          "OS/2" "IBM OS/2" \
    21          "WIN NT" "Microsoft Windows NT" \
    22          "PCDOS"  "IBM PC DOS" \
    23          "MSDOS"  "Microsoft DOS" 2> $tempfile
    24
    25  retval=$?
    26
    27  choice=`cat $tempfile`
    28
    29  case $retval in
    30    0)
    31      echo "'$choice' chosen.";;
    32    1)
    33      echo "Cancel pressed.";;
    34    255)
    35      echo "ESC pressed.";;
    36  esac

라디오리스트(radiolist)
--radiolist    <text> <height> <width> <list height> <tag1> <item1> <status1>.
     1  #! /bin/sh
     2  # $Id: radiolist,v 1.8 2004/12/20 00:14:24 tom Exp $
     3  : ${DIALOG=dialog}
     4
     5  tempfile=`tempfile 2>/dev/null` || tempfile=/tmp/test$$
     6  trap "rm -f $tempfile" 0 1 2 5 15
     7
     8  $DIALOG --backtitle "No Such Organization" \
     9          --title "RADIOLIST BOX" --clear \
    10          --radiolist "Hi, this is a radiolist box. You can use this to \n\
    11  present a list of choices which can be turned on or \n\
    12  off. If there are more items than can fit on the \n\
    13  screen, the list will be scrolled. You can use the \n\
    14  UP/DOWN arrow keys, the first letter of the choice as a \n\
    15  hot key, or the number keys 1-9 to choose an option. \n\
    16  Press SPACE to toggle an option on/off. \n\n\
    17    Which of the following are fruits?" 20 61 5 \
    18          "Apple"  "It's an apple." off \
    19          "Dog"    "No, that's not my dog." ON \
    20          "Orange" "Yeah, that's juicy." off \
    21          "Chicken"    "Normally not a pet." off \
    22          "Cat"    "No, never put a dog and a cat together!" off \
    23          "Fish"   "Cats like fish." off \
    24          "Lemon"  "You know how it tastes." off 2> $tempfile
    25
    26  retval=$?
    27
    28  choice=`cat $tempfile`
    29  case $retval in
    30    0)
    31      echo "'$choice' chosen.";;
    32    1)
    33      echo "Cancel pressed.";;
    34    255)
    35      echo "ESC pressed.";;
    36  esac
-
여러 항목중에서 하나만 선택이 가능.
- statuesl
부분에 off/on이 나온다. on/off 대소문자 구분이 없다. dog 가 기본 값으로 선택되어져 있다.

체크리스트(checklist)
--checklist    <text> <height> <width> <list height> <tag1> <item1> <status1>

     1  #! /bin/sh
     2  # $Id: checklist,v 1.8 2004/12/20 00:14:24 tom Exp $
     3  : ${DIALOG=dialog}
     4
     5  : ${DIALOG_OK=0}
     6  : ${DIALOG_CANCEL=1}
     7  : ${DIALOG_ESC=255}
     8
     9  tempfile=`tempfile 2>/dev/null` || tempfile=/tmp/test$$
    10  trap "rm -f $tempfile" 0 1 2 5 15
    11
    12  $DIALOG --backtitle "No Such Organization" \
    13          --title "CHECKLIST BOX" \
    14          --checklist "Hi, this is a checklist box. You can use this to \n\
    15  present a list of choices which can be turned on or \n\
    16  off. If there are more items than can fit on the \n\
    17  screen, the list will be scrolled. You can use the \n\
    18  UP/DOWN arrow keys, the first letter of the choice as a \n\
    19  hot key, or the number keys 1-9 to choose an option. \n\
    20  Press SPACE to toggle an option on/off. \n\n\
    21    Which of the following are fruits?" 20 61 5 \
    22          "Apple"  "It's an apple." off \
    23          "Dog"    "No, that's not my dog." ON \
    24          "Orange" "Yeah, that's juicy." off \
    25          "Chicken"    "Normally not a pet." off \
    26          "Cat"    "No, never put a dog and a cat together!" oN \
    27          "Fish"   "Cats like fish." On \
    28          "Lemon"  "You know how it tastes." on 2> $tempfile
    29
    30  retval=$?
    31
    32  choice=`cat $tempfile`
    33  case $retval in
    34    $DIALOG_OK)
    35      echo "'$choice' chosen.";;
    36    $DIALOG_CANCEL)
    37      echo "Cancel pressed.";;
    38    $DIALOG_ESC)
    39      echo "ESC pressed.";;
    40    *)
    41      echo "Unexpected return code: $retval (ok would be $DIALOG_OK)";;
    42  esac
-
라디오리스트와 달리 여러항목중 여러개를 선택 할수 있다.

 

 

 

 

 

 

 

 

 

grep,egrep,sed,awk사용법(정규표현식)
리눅스
2008/05/19 09:11
▒ grep :
패턴을 이용한 search => regular expression을 잘 만드는 것이 필요하다
.

  grep option(s) pattern filename(s)

OS/tdir] grep -n dba /etc/group       # -n :
파일 안에서의 패턴이 발견된 라인 및 라인 번호
OS/tdir] grep -v dba /etc/group           # -v  :
패턴이 발견되지 않은 라인
OS/tdir] grep -n dba /etc/group /etc/passwd          #
파일을 여러개 나열...
OS/tdir] grep -i the ~/tdir/*                 # -i :
대소구분 무시(ignore) => the 대소구분 없이

OS/tdir] grep -li the ~/tdir/*                 # -l :
패턴이 들어있는 파일 이름만...  
OS/tdir] grep -c the ~/tdir/*                 # -c :
패턴이 들어있는 라인 번호만
...

[
패턴을 좀더 정교하게 표현하려면 regular expression을 사용해야 한다
]

^      : ^
패턴            : 패턴으로 시작하는 모든 라인 찾기

$      :
패턴$           : 패턴으로 끝나는 모든 라인 찾기
.       : d...              : d
로 시작하는 4자리 character 찾기
*      : [a-d]*          : a, b, c, d
로 시작하는 character 찾기
[]    : [Dd]atabase  : Database
또는 database 찾기
[^]   : [^D]             : D
가 나타나지 않는 라인 찾기

OS/tdir] grep -i ^the ~/tdir/*              # the
로 시작하는 라인 찾기
OS/tdir] grep -i meal.$ ~/tdir/*          # meal.
으로 끝나는 라인 찾기
OS/tdir] grep c...d ~/tdir/*                # c
로 시작하고 d로 끝나는 5자리 character 찾기

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

▒  egrep(expression grep) : searches  files  for  a pattern of characters
                                           and prints all lines that contain that pattern.



OS/tdir] egrep '(a|A)d+' /etc/passwd   # ad
또는 Ad가 포함된 라인 찾기
OS/tdir] vi grep_test                               #
아래 내용을 추가하세요... 붙여넣기... ^^

An Oracle database is a collection of data treated as a unit.
The purpose of a database is to store and retrieve related information.
A database server is the key to solving the problems of information management.

OS/tdir] egrep 'Oracle|purpose' grep_test   # Oracle
또는 purpose가 포함된 라인 찾기

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

▒ sed : stream editor => file
을 열지 않고 data를 편집하는 기능

  sed [-options] [address] command file... [>newfile]



# sed '/pattern/d' filename # file
에서 패턴이 포함된 라인을 지우고 그 결과를 화면에 표시
                                          #
원본 파일에는 아무런 변화가 없다.

OS/tdir] cp grep_test sed_test
OS/tdir] cat sed_test
OS/tdir] sed '/purpose/d' sed_test                  # purpose
라는 단어가 들어간 라인 삭제

# sed '#d' filename      : #
라인만 삭제
# sed '$d' filename      :
마지막 라인 삭제
# sed '#,$d' filename   : #
라인부터 마지막 라인까지 지우기

# sed '#,#d' filename   : #
라인부터 # 라인까지 지우기  

OS/tdir] sed '1d' sed_test     # 1
라인만 삭제

OS/tdir] sed '$d' sed_test     #
마지막 라인만 삭제

OS/tdir] sed '/purpose/d' sed_test > set_out     # sed
처리 결과를 sed_out 으로 저장
OS/tdir] cat set_out

OS/tdir] sed '/purpose/p' sed_test             #
패턴이 포함된 라인이 두번 출력(print)된다.
OS/tdir] sed -n '/purpose/p' sed_test        #
패턴이 포함된 라인만 출력된다
.

OS/tdir] sed 's/$/  Oracle/' sed_test       #
각 라인의 마지막에 원하는 글자 추가


OS/tdir] sed 's/  */#/g' sed_test              # space
를 찾아서 #기호로 변환한다.
OS/tdir] sed 's/  */-/g' sed_test              # space
를 찾아서 -기호로 변환한다
.
                                                                      # *
기호 앞에 space가 두개라는 점에 유의


OS/tdir] #
한번에 여러 가지 편집 수행
OS/tdir] sed -e 's/database/DATABASE/g' -e 's/information/INFORMATION/g' sed_test

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

▒ awk :
패턴 검색과 처리를 위한 언어

=>
명령어의 이름은 개발자인 Alfred V. Aho, Peter J. Weinberger, Brian W. Kernighan 3인의

    
머리글자를 사용해서 만든 것이다.

  awk '{ action}' filename

OS/tdir] ls -l | awk '{print $0}'              #
전체 필드가 모두 나타나도록...

drwxr-xr-x   2   prof9i4  dba          512  4
   25
  15:44   a_dir
drwxr-xr-x   2   prof9i4  dba          512  4
   18
  23:53   b_dir

     $1     $2     $3   $4        $5  $6   $7     $8    $9
                                        $0                                            




OS/tdir] ls -l | awk '{print $1}'                    # 1
번 필드만 나타도록...
OS/tdir] ls -l | awk '{print $1, $9}'               # 1
번과 9번 필드만 나타나도록
...
OS/tdir] ls -l | awk '{print $3 "\t" $4 "\t" $9}'                # Tab
키가 적용된 결과
...
OS/tdir] ls -lt | awk '{print $9, "is using", $5, "bytes"}'     # text
추가

OS/tdir] ls -lt | awk '$5 <= 200 {print $0}'   # 5
번 필드가 200 이하일 경우 출력




/////////////


from
http://newmkka.tistory.com/entry/UNIX-cut-%EB%AA%85%EB%A0%B9%EC%96%B4



Unix
로그를 보기위해 tail 명령어를 자주 사용하는 경우가 많다. 이때 cut 명령어와 조합하면 훨씬 편하게 로그를 확인할수 있다.


아래 로그는 tail 명령어로 확인한 ProFrame IPPR 로그중 한부분이다. 이때 로그를 살펴보면 : 문자로 로그구분이 된것을 확인 할 수 있다
.


$ tail -f TPFMIPPR_usr_20090101.log


(T) TP :100350707976:20090129ibmsap1t1907210035000000:19072 [SPFMIPPR       :pfmTpForward.c :pfmTpForward                       :00088] >> TPAPI  [TPFORWARD          :xxxxxxxxA           ] ? FLAGS [0]




다음과 같이 cut 명령어를 통해 필요 없는(원치않는) 부분을 삭제하여 볼수 있다.


$ tail -f TPFMIPPR_usr_20090101.log | cut -d : -f 1,5-


(T) TP :pfmTpForward                       :00088] >> TPAPI  [TPFORWARD          : xxxxxxxxA           ] ? FLAGS [0]


|(
파이프) 명령어 뒤에 있는 cut 명령어를 살펴보자
(
자세한건 man 명령어를 통해 보시길.)


-d :
*
문자 : 를 기준으로 나눈다는 뜻이다


-f 1,5-
* 1
번째와 5번째뒤로 모두 보겠다는 뜻이다.
*
여기서 1번째는(T) TP를 뜻하고 2,3,4 는 보이지 않고 5번째부터 보이는것을 확인할수 있다
.




너무긴 로그를 좀더 편하게(보고싶은것만) 보기 위해 cut 명령어를 적절히 사용하자
!!

////////////



uniq  :
일종의 group을 짓는것으로... 그냥 쓰면 같은건 하나만 나오게 하고 -c 까지 주면 각 수까지 보여준다.

 

 

 

--실전 쉘 프로그래밍 --

단순 백업

 

#mkdir  /Backup

 

 

#!/bin/bash

tar cvfz /Backup/home.tar.gz /home

 

- /home 디렉토리를 tar 로 묶고 -gzip으로 압축하여  /Backup 디렉토리 밑에 home.tar.gz 저장

 

변수를 사용하여 재구성

 

#!/bin/bash

from_backup_dir="/home"

to_backup_dir="/Backup/"

to_backup_file="home"

 

tar cvfz ${to_backup_dir}${to_backup_file}.tar.gz ${from_backup_dir}

 

-- 백업은 1주일에 한두번, 자주하는 경우에는 하루에 한두번씩도 합니다.

파일명이 같은 경우 기존의 파일을 지우고 새로운 파일이 생성.

 

#date +%Y%m%d

#!/bin/bash

from_backup_dir="/home"

to_backup_dir="/Backup/"

today=`date +%Y%m%d`

 

tar cvfz ${to_backup_dir}${today}.tar.gz ${from_backup_dir}

 

---여러 디렉토리 백업

from_backup_dir="/home /etc/passwd /etc/shadow /var/log"

 

-- 백업 파일의 분할

큰 파일을 분할 하는 명령어는 split   CD 용량인 650M

#!/bin/bash

from_backup_dir="/home"

to_dir="/Backup/"

today=`date +%Y%m%d`

to_file=${today}.tar.gz

 

tr cvfz ${to_dir}${to_file} ${from_backup_dir}

split -b 650m ${to_dir}${to_file} ${to_dir}${today}

rm -f ${to_dir}${to_file}

 

--20090715aa, 20090715ab, 20090715ac 와 같은 형식으로 분할.

 

-- 분할된 파일 복구

#cat 20090715* > 20090715.tar.gz

 

 

-- 변경된 부분만 백업

#tar  명령어의 옵션중에 –N 옵션을 이용하면 특정 날짜 이후에 변경된 파일만을 아카이브 파일로 묶어 줄수 있음…. -–newer 도 같은 용도

#tar cvfz 20090715.tar.gz –N 20090714 /home

#!/bin/bash

from_backup_dir="/home"

to_dir="/Backup/"

today=`date +%Y%m%d`

to_file=${today}.tar.gz

 

tar cvfz ${to_dir}${to_file} -N 20090715 ${from_backup_dir}

 

- 매번 배겁을 받을때마다 –N 옵션으로 들어가는 날짜를 수정해 주어야 합니다. 마지막 백업을 받은 날짜를 알수 있다면, 백업할때마다 스크립트를 수정해야 하는 불편함을 없앨 수 있음.

#!/bin/bash

from_backup_dir="/home"

to_dir="/Backup/"

today=`date +%Y%m%d`

to_file=${today}.tar.gz

 

tar cvfz ${to_dir}${to_file} -N `cat ./last_date` ${from_backup_dir}

 

echo $today > ./last_date

 

-- 9라인에서 오늘 날짜를 lst_date 파일로 저장하고 있습니다. 다음에 이 스크립트 파일을 실행하게 되면 7라인에서 기존에 저장된 날짜를 불러와서 tar 명령을 실행하고, 다시 9라인에서 실행한 날짜를 저장하게 됨.

 

** 서비스 활성화 여부 확인

#!/bin/sh

 

# enabled - show what services are enabled with inetd and xinetd,

# if they're available on the system.

 

iconf="/etc/inetd.conf"

xconf="/etc/xinetd.conf"

xdir="/etc/xinetd.d"

 

if [ -r $iconf ] ; then

  echo "Services enabled in $iconf are:"

  grep -v '^#' $iconf | awk '{print "  " $1}'

  echo ""

  if [ "$(ps -aux | grep inetd | egrep -vE '(xinet|grep)')" = "" ] ; then

    echo "** warning: inetd does not appear to be running"

  fi

fi

 

if [ -r $xconf ] ; then

  # don't need to look in xinietd.conf, just know it exists

  echo "Services enabled in $xdir are:"

 

  for service in $xdir/*

  do

    if ! $(grep disable $service | grep 'yes' > /dev/null) ; then

      echo -n "  "

      basename $service

    fi

  done

 

  if ! $(ps -aux | grep xinetd | grep -v 'grep' > /dev/null) ; then

    echo "** warning: xinetd does not appear to be running"

  fi

fi

 

exit 0

 

 

'Linux(OS)' 카테고리의 다른 글

OSWatcher Black Box로 OS resource usage 정보 수집하기  (0) 2015.02.01
Sar을 이용한 성능 분석  (0) 2014.06.08
VMWare ORACLE 11g R2 RAC on 6.5  (0) 2014.02.22
ASM에서 disk 추가 및 삭제  (0) 2013.12.09
Oracle 11g RAC_ASM  (0) 2013.12.02