- 쉘 스크립트 작성하기
expr 10 % 3
- 조건문
if 구문
if 조건 ; then
elif 조건 ; then
else
fi
case 구문
case VAR in
VAR_LIST ) ;;
VAR_LIST ) ;;
*) ;;
esac
- EX)
|
#!/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>
'Security > shell scripts' 카테고리의 다른 글
쉘 스크립트 예제 (0) | 2017.10.10 |
---|---|
쉘 스크립트 작성하기_(반복문) (0) | 2017.10.10 |
쉘 스크립트_2 (0) | 2017.10.02 |
쉘 스크립트 (0) | 2017.09.27 |