- 파일과 디렉토리 구분
# 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 |