본문으로 바로가기

쉘 스크립트 작성하기(조건문)

category Security/shell scripts 2017. 10. 2. 15:30
  • 쉘 스크립트 작성하기 
- 쉘 스크립트 실행
# bash script.sh
# . script.sh
# chmod u+x script.sh ; ./script.sh
# vi script.sh ; chmod u+x script.sh ; ./script.sh

- 매직 넘버 
#!/bin/bash

- 주석

- 입력 / 출력
출력 : echo , printf
입력 : read

- 산술연산
expr 1+ 2
expr 2 - 1
expr 3 \* 3  /* '*'는 0개 이상의 모두라는 뜻을 가지고 있으므로 \으로 의미를 안쓰고 곱셈의 의미로 사용 */
expr 4 / 2

expr 10 % 3


- 조건문

if 구문

if 조건 ; then

elif 조건 ; then

else

fi


case 구문

case VAR in

VAR_LIST ) ;;

VAR_LIST ) ;;

*) ;;

esac

  • EX)
# mkdir -p /root/bin
# cd /root/bin

# vi today.sh    /* 날짜 출력 */

 

 #!/bin/bash


echo

echo -n " Today date and time : "

date

echo

 

# echo -n  /* echo 는 한줄을 띄어 쓰는대 -n 옵션은 바로 다음에 출력을 한다. */


# chmod 755 *.sh     /* 실행권한 부여 */

# ./today.sh


# vi author.sh    /* << 확인 실습 */

 

 #!/bin/bash


AUTHOR="Lee,JongHyeon"

cat << EOF

------------------------------

| Author : $AUTHOR

| Date   : 2017.10.02

------------------------------

EOF

 


# chmod 755 author.sh

# ./suthor.sh


vi menu.sh

 

 #!/bin/bash


cat << EOF

------------------------------

| (1) : who

| (2) : date

| (3) : quit

------------------------------

EOF


echo -n "Enter your choice (1/2/3)?:"

read CHOICE


case $CHOICE in

1) who;;

2) date;;

3) quit;;

*) echo " error "

exit 2;;

esac

 


vi pingtest.sh

 

 #!/bin/bash


START=200

END=210

NET=192.168.17


while [ $START -le $END ]

do

ping -c 1 $NET.$START > /dev/neull 2>&1 \

&& echo "$NET.$START : alive " \

|| echo "$NET.$START : die "

START=`expr $START + 1 `

done

 

> 192.168.17.200 부터 192.168.17.210까지 ping 테스트를 한다. 출력은결과는 생략하고 alive와 die 로 출력한다. 


# cp /etc/sysconfig/network-script/ifcfg-eth0 .    /* 실제 파일을 변경하면 위험하므로 복사해서 바뀐것을 확인한다. */

# vi ip.sh                                                                                    # vi ifcfg-eth0

 

 #!/bin/bash

# ( current ) service network restart -> ifconfig eth0

# ( boot    ) system-config-network-tui -> ifcfg-eth0


IP0=`awk -F= '$1 =="IPADDR" {print $2}' ifcfg-eth0`

NETMASK=`awk -F= '$1 =="NETMASK" {print $2}' ifcfg-eth0`


echo -n " Enter your ip :"

read IP1


echo -n " Enter your netmask : "

read NETMASK1


sed -i "/IPADDR=/s/$IP0/$IP1/" ifcfg-eth0

sed -i "/NETMASK=/s/$NETMASK/$NETMASK/" ifcfg-eth0


. ifcfg-eth0



DEVICE=eth0

BOOTPROTO=static

BROADCAST=192.168.17.255

HWADDR=00:0C:29:78:75:EC

IPADDR=192.168.17.200

NETMASK=255.255.255.0

NETWORK=192.168.17.0

ONBOOT=yes


 

> IP0=`awk -F= '$1 =="IPADDR" {print $2}' ifcfg-eth0`

   NETMASK=`awk -F= '$1 =="NETMASK" {print $2}' ifcfg-eth0`

/* 기존의 IP와 NETMASK 를 ifcfg-eth0 에서 구분자를 = 으로 설정하고 IPADDR 과 NETMASK를 찾아 두번째 인자를 변수에 저장한다. */


> 바꿀 IP와 NETMASK를 입력받는다.

> sed -i "/IPADDR=/s/$IP0/$IP1/" ifcfg-eth0

   sed -i "/NETMASK=/s/$NETMASK/$NETMASK/" ifcfg-eth0

/* sed -i 명령어로 파일에 직접 기존의 IP를 입력받은 IP로 바꾼다. */



# vi new.sh

 

 #!/bin/bash


if [ $# -ne 1 ] ; then

echo " Usage : $0 < start|stop|restart>"

exit 1

fi


CHOICE=$1


case $CHOICE in

start) echo 1111 > /test/test.start

if [ $? -eq 0 ] ; then

echo "[ OK ] : Starting new.sh"

else

echo "[ FAIL ] : Not starting new.sh"

exit 3

fi;;

stop) echo 2222 > /test/test.stop

if [ $? -eq 0 ] ; then

echo "[ OK ] : Stopping new.sh"

else

echo "[ FAIL ] : Not stopping new.sh"

exit 3

fi;;

restart) echo "[ OK ] : Starting new.sh"

echo "[ OK ] : Stopping new.sh"

;;

*) echo " Usage : $0 < start|stop|restart>"

exit 2;;

esac

 

> if [ $# -ne 1 ] ; then     /* 모든 인자가 ( $# ) 1보다 작을때 명령어 사용 방법을 알려줌 */

> case $CHOICE in     /* echo 명령어를 실행시켜서 잘 실행되면 ( [ $? -eq 0 ] ) OK  / 실행 안되면 FAIL을 출력한다 */

> *) start/stop/restart 이외의 문자를 입력하면 사용법을 다시 알려준다 .*/


# chmod 755 new.sh

# ./new.sh

-Usage : ./new.sh < start|stop|restart>

# ./new.sh start

# ./new.sh stop

# ./new.sh restart


# ls -l /test/test.start /tset/test.stop


# vi service.sh

 

 #!/bin/bash


# /root/bin/new.sh -> service new.sh


if [ $# -ne 2 ] ; then

echo " Usage : $0 <filename> < start|stop|restart>"

exit 1

fi


EXEFILE=$1

ACTION=$2


if [ ! -f /root/bin/$EXEFILE ] ; then

echo "/root/bin/$EXEFILE not found "

exit 2

fi


case $ACTION in

start) /root/bin/$EXEFILE start;;

stop)  /root/bin/$EXEFILE stop;;

restart) /root/bin/$EXEFILE start

/root/bin/$EXEFILE stop;;

*)echo " Usage : $0 <filename> < start|stop|restart>"

exit 3;;

esac

 

> if [ $# -ne 2 ] ; then     /* service 다음에 2개의 인자가 필요하다 2개의 인자가 없다면 사용방법 출력 */

> 입력된 인자 각각 변수 저장


> if [ ! -f /root/bin/$EXEFILE ] ; then     /* EXEFILE이 존재하지 않는다면 오류 메시지 출력 */

> case $ACTION in         /* ACTION의 값에 따라 분류 */

/root/bin/exefile을 실행하고 인자를 start / stop 으로 넘겨 실행  나머지는( *) ) 사용방법 출력


# chmod 755 service.sh

# ./service.sh

Usage : ./service.sh <filename> < start|stop|restart>

# ./service.sh new.sh start
# ./service.sh new.sh stop
# ./service.sh new.sh restart


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

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