Shell编程条件语句练习题

    /    2019-01-29

1. 监控Memcached缓存服务是否正常

监控Memcached缓存服务是否正常,模拟用户(web客户端)检测。

使用nc命令加上set/get来模拟检测。

脚本内容:

[root@oldboy scripts]# vim  memcache_check.sh 
#!/bin/bash
. /etc/init.d/functions
. /etc/init.d/run  # 函数 jingdutiao 使用
MemPort=`netstat -lntp  |grep -c  0.0.0.0:11211`
Set_Key='printf "set oldboy2017 0 10 8\r\noldboy2018\r\n"|nc 10.0.0.180 11211'
Get_Key='printf "get oldboy2017\r\n" |nc 10.0.0.180 11211 |grep -c oldboy2018'
ReStart='systemctl restart memcached.service'
if [ $MemPort -eq 1 ]
  then
    $Set_Key
    $Get_Key
    if [ $? -ne 1 ]
      then
      action "Memcached 运行正常!" /bin/true
    else
      action "Memcached 服务异常!"  /bin/false
    fi
else
    action "服务未启动!" /bin/false
    $ReStart
    jingdutiao
fi

2. 使用(case)编写rsync管理脚本

写网络服务独立进程模式下Rsync的系统启动脚本,例如:/etc/init.d/rsyncd {start|stop|restart}。

要求:

(1)要使用系统函数库技巧。

(2)要用函数,不能一坨

(3)在centos 6中 可被chkconfig管理。

注意:

服务的停止操作和启动操作之间要有间隔时间,使用sleep 1

pkill 进程
 sleep 1
start 服务

rsync服务启动脚本

 [root@oldboy scripts]# cat rsyncd 
  #!/bin/bash
 
 . /etc/init.d/functions
 . /etc/init.d/run 
 
 Rsync_Port=`netstat -lntup |grep -c  0.0.0.0:873`
 Rsync_COM1='rsync --daemon'
 Rsync_COM2='pkill rsync'
 
 Rsync_Start() {
    Rsync_Port1=`netstat -lntup |grep -c  0.0.0.0:873`
    if [ $Rsync_Port1 -ne 0 ]
      then
       action  "服务已启动" /bin/false
       exit 3
    else
       $Rsync_COM1
       #action  "Rsync 启动" /bin/true
       QiDong
    fi
 }
 
 Rsync_Stop() {
    Rsync_Port2=`netstat -lntup |grep -c  0.0.0.0:873`
    if [ $Rsync_Port2 -eq 0 ]
      then
        action  "服务未启动" /bin/false
        exit 3
    else
        $Rsync_COM2 
        #action  "Rsync 停止" /bin/true
        TingZhi
    fi
 }
 
 Rsync_Status() {
    if [ $Rsync_Port -eq 1 ]
      then
        echo  "Rsync 服务运行中..." 
    else
        echo  "Rsync 服务未运行" 
    fi
 }
 
 Rsync_Restart() {
    Rsync_Stop 
    Rsync_Start
 }
 COMMAND=$1
 
 case "$COMMAND" in
   start)
     Rsync_Start
     ;;
   stop)
     Rsync_Stop
     ;;
   status)
     Rsync_Status
     ;;
   restart|reload|force-reload)
     Rsync_Restart
     ;;
   *)
     echo $"Usage: $0 {start|stop|status|restart|reload|force-reload}"
     exit 2
 esac

3. 菜单自动化软件部署脚本实践

综合实例:打印选择菜单,按照选择一键安装不同的Web服务。

示例菜单:

[root@oldboy scripts]# sh menu.sh
    1.[install lamp]
    2.[install lnmp]
    3.[exit]
    pls input the num you want:

要求:

(1)当用户输入1时,输出“start installing lamp.提示”然后执行/server/scripts/lamp.sh,脚本内容输出"lampis installed"后退出脚本,工作中就是正式lamp一键安装脚本;

echo 'echo lampis installed' > /server/scripts/lamp.sh
chmod +x /server/scripts/lamp.sh

(2)当用户输入2时,输出“start installing lnmp.提示” 然后执行/server/scripts/lnmp.sh输出"lnmpis installed"后退出脚本,工作中就是正式lnmp一键安装脚本;

echo 'echo lnmpis installed' > /server/scripts/lnmp.sh
chmod +x /server/scripts/lnmp.sh

(3)当输入3时,退出当前菜单及脚本;

(4)当输入任何其它字符,给出提示“Input error”后退出脚本;

(5)要对执行的脚本进行相关的条件判断,例如:脚本文件是否存在,是否可执行等判断。

脚本内容

[root@oldboy scripts]# cat menu.sh 
  #!/bin/bash
 
 cat <<EOF
 1.[install lamp]
 2.[install lnmp]
 3.[exit]
 EOF
 
 read -p "please input the num you want:" Num
 
 case "$Num" in 
   1)
     if [ -f /server/scripts/lamp.sh ]
       then
          echo -e "\033[36mstart installing lamp\033[0m"
          /server/scripts/lamp.sh
     else
       echo -e "\033[5;41;37m /server/scripts/lamp.sh 文件不存在 \033[0m"
     fi 
     ;;
   2) 
     if [ -f /server/scripts/lnmp.sh ]
       then
          echo -e "\033[36mstart installing lnmp\033[0m"
         /server/scripts/lnmp.sh
     else
       echo -e "\033[5;41;37m /server/scripts/lnmp.sh 文件不存在 \033[0m"
     fi
     ;;
   3)
     exit
     ;;
   *)
     echo -e "\033[31mInput error \033[0m"
     exit 2 
 esac

4. if 与 case 对比

if 语句类似黑名单,需要把这种错误场景封堵

case 语句类似白名单,只要把正确结果列完整即可

(18)

分享至