본문으로 바로가기

쉘 스크립트 예제

category Security/shell scripts 2017. 10. 10. 19:37

- 파일과 디렉토리 구분


# vi dir.sh

 

 #!/bin/bash


echo -n "Enter your Filename : "

read FILE


if [ -d $FILE ] ; then

  echo " File is a Directory "

elif [ -f $FILE ] ; then

  echo " File is a regular file"

else

  echo "Not Found"

  exit 33

fi

 


- 계산기


# vi calculator.sh

 

 #!/bin/bash


echo -n "Enter A : "

read A

echo -n "Enter B : "

read B


echo "--------------------------------------------------------------"

echo "  (1) +   (2) -   (3)   *  (4)   /

echo " -------------------------------------------------------------"


echo -n "Enter your choice :"

read C


case $C in

  1) echo " A + B = `expr $A + $B ` " ;;

  2) echo " A - B = `expr $A - $B ` " ;;

  3) echo " A * B = `expr $A \* $B ` " ;;

  4) if [ $B - eq 0 ] ; then

         echo "Wrong B "

      else

         echo " A / B = `expr $A + $B ` " ;;

      fi;;

   *) echo " Wrong Number" ;;

esac

 



- 서비스 비교


# vi check_service.sh

 

 #!/bin/bash


export LANG=C

TMP1=/tmp/tmp1

HOST1=linux220

HOST2=linux249


chkconfig --list | sed -n '/xinetd based/,$p' > $HOST1.txt

ssh 172.16.6.249 chkconfig --list | sed -n '/xinetd based/,$p' > $HOST2.txt


################################################


diff $HOST1.txt $HOST2.txt | fgrep '>' | cut -c2- > $TMP1


#################################################


diff $HOST1.txt $HOST2.txt > $TMP1

cat $TMP1 | sed "s/</$HOST1/" | sed "s/>/$HOST2/"


#################################################

 

-> xinetd based를 찾아야하므로 언어를 먼저 바꾼다.

-> chkconig --list에서 xinetd based라는 단어 부터 끝까지 linux220.txt에 저장한다.

-> 172.16.6.249의 서버에서도 마찬가지로 linux249.txt.에 저장한다.

################################################################################

-> diff 명령어로 자신의 서버(linux220)과 달리 외부서버(linux249)에서만 다른게 설정된 서비스를 출력한다.

################################################################################

-> diff 명령어로 비교한 내용을 임시파일로 만들고 임시파일을 열어 보기좋게 서버이름과 다른 서비스를 출력한다.


- 리포트 파일 검색 출력


[사전작업] report.txt 생성

# vi report.txt

 

 [U-1] Password policy check

PASS_MAX_DAYS   99999

PASS_MIN_DAYS   0

PASS_MIN_LEN    5

PASS_WARN_AGE   7


[U-2] End user check

user01:x:501:501::/home/user01:/bin/bash

user02:x:502:502::/home/user02:/bin/bash

user03:x:503:503::/home/user03:/bin/bash


[U-3] PAM check

auth       sufficient  pam_wheel.so trust use_uid

 


# vi check_report.txt

 

 #!/bin/bash


if [ $# -ne 1 ] ; then

  echo "Usage : $0 <CHECKNUM>"

  exit 1

fi


CHECKNUM=$1

CHECK=`echo $CHECKNUM | awk -F'-' '{print $1}'`

NUM1=`echo $CHECKNUM | awk -F'-' '{print $2}'`

NUM2=`expr $NUM1 + 1 `


sed -n "/\[$CHECK-$NUM\]/,/\[$CHECK-$NUM2\]/p" report.txt | sed '$d'


 


# ./check_report.sh U-1

-> 인자를 U-1로 받는다. 

-> CHECk에는 U 만 NUM1에는 1 만 입력된다.

-> U-1 에서 U-2까지만 출력하므로 NUM2는 NUM1+1이다. 

-> sed 명령어로 [U-1]에서 [U-2] 까지 출력한다. 

-> 마지막줄 [U-2]는 필요없으므로 $d로 마지막줄을 삭제한다.


- 파일 확장자 변경


# vi move_filename.sh

 

 #!/bin/bash


if [ $# -ne 3 ] ; then

  echo "Usage : $0 <dir> <word> <word>"

  exit 1

fi


D_WORK=$1

WORD1=$2

WORD2=$3

T_FILE1=/tmp/.tmp1


ls -1 $D_WORK | grep ''$WORD1'$' > $T_FILE1

for FILE in `cat $T_FILE1`

do

  mv $D_WORK/$FILE `echo $D_WORK/$FILE | sed 's/'$WORD1'$/'$WORKD2'/g'`

done

 


-> 인자를 3개를 받는다. 바꿀 파일이 있는 디렉토리 현재이름과 바꿀 이름

-> ls -1 명령어를 통해 입력받은 디렉토리의 속의 파일의 이름을 한줄씩 읽어 현재 이름을 가진 파일만 뽑아 파일에 저장한다.

-> 반복문으로 파일이 끝날때 까지 파일의 이름 끝 WORD1 을 WORD1로 교체한다.


- telnet 과 ftp


# vi telnet_ftp.sh

 

 #!/bin/bash


IP=172.16.6.249

U_NAME=root

U_PASS=security1.


TELNET() {

  sleep 10 ; echo "$U_NAME"

  sleep 1 ; echo "U_PASS"

  sleep 1 ; echo 'tar cvzf /tmp/linux220.tar.gz /home'

  sleep 4 ; echo 'exit'

}


TELNET | telnet $IP


ftp -n $IP << EOF

user "$U_NAME" "$U_PASS"

cd /tmp

lcd /root

bin

hash

prompt

mget linux220.tar.gz

quit

EOF

 

-> 접속할 서버 172.16.6.249

-> 텔넷을 이용하여 서버에 접속해 /home 을 백업받는다.

-> ftp를 이용해서 백업받은 파일을 내 서버에 옮겨온다.


-> TELNET의 sleep 텔넷은 로그인 하라는 신호를 받아야 user를 입력받는다. 때문에 신호를 받기까지 시간이 걸린다.

-> ftp는 그렇지 않아 sleep이 필요하지 않다. 


'Security > shell scripts' 카테고리의 다른 글

쉘 스크립트 작성하기_(반복문)  (0) 2017.10.10
쉘 스크립트 작성하기(조건문)  (0) 2017.10.02
쉘 스크립트_2  (0) 2017.10.02
쉘 스크립트  (0) 2017.09.27