Shell脚本简单实例(if 、case)

137 阅读3分钟

实验一

检查用户家目录中的 test.sh 文件是否存在,并且检查是否有执行权限

[root@localhost ~]# vim demo.sh 

#!/bin/bash

if [ -f ~/test.sh ]
 then
  echo "文件存在"
 if [ -x ~/test.sh ]
  then
   echo "文件有可执行权限"
  else
   echo "文件没有可执行权限"
 fi
 else
  echo "文件不存在"
fi

[root@localhost ~]# ./demo.sh 
文件存在
文件有可执行权限
[root@localhost ~]# ll ~/test.sh 
-rwxr-xr-x. 1 root root 0 8月  24 15:05 /root/test.sh

image.png

image.png

实验二

提示用户输入100米赛跑的秒数,要求判断秒数大于0且小于等于10秒的进入选拔赛,大于10秒的都淘汰,如果输入其它字符则提示重新输入;进入选拔赛的成员再进一步判断男女性别,男生进男生组,女生进女生组,如果输入错误请提示错误

[root@localhost ~]# vim demo1.sh 

#!/bin/bash
#百米成绩
read -p "请输入100米赛跑的秒数:" time

if [ $time -gt 0 ] && [ $time -le 10 ]
 then
   echo "进入选拔赛"
 #判断男女性别

 read -p "请输入性别(b(男)/g(女)):" sex
 if [ $sex = b ]
   then
    echo "进入男生组"
   elif [ $sex = g ]
     then
       echo "进入女生组"
  else
  echo "错误"
fi

 elif [ $time -gt 10 ]
   then
    echo "淘汰"
else
  echo "请重新输入"
fi

[root@localhost ~]# ./demo1.sh 
请输入100米赛跑的秒数:0
请重新输入
[root@localhost ~]# ./demo1.sh 
请输入100米赛跑的秒数:5
进入选拔赛
请输入性别(b(男)/g(女)):b
进入男生组
[root@localhost ~]# ./demo1.sh 
请输入100米赛跑的秒数:10
进入选拔赛
请输入性别(b(男)/g(女)):g
进入女生组
[root@localhost ~]# ./demo1.sh 
请输入100米赛跑的秒数:11
淘汰

image.png

image.png

实验三

用case语句解压根据后缀名为 .tar.gz 或 .tar.bz2 的压缩包到 /opt 目录

[root@localhost ~]# vim demo3.sh 

#!/bin/bash

case $1 in
*.tar.gz)
if [ -f $1 ]
then
tar -zxvf $1 -C /opt &> /dev/null
echo "已解压"
else
echo "$1不是可解压文件"
fi
;;

*.tar.bz2)
if [ -f $1 ]
then
tar -jxvf $1 -C /opt &> /dev/null
echo "已解压"
else
echo "$1不是可解压文件"
fi
;;

*)
echo "输入错误"
esac

[root@localhost ~]# vim demo3.sh 
[root@localhost ~]# ./demo3.sh 
输入错误
[root@localhost ~]# ./demo3.sh 111.tar.gz
111.tar.gz不是可解压文件

image.png

image.png

实验四

提示用户输入内容,使用if 语句判断输入的内容是否为整数。再判断输入的内容是奇数还是偶数。

[root@localhost ~]# vim demo4.sh 

#!/bin/bash

read -p "请输入一个数" a
if [ $a = 0  ]
 then
  echo  "该数为整数"
 else
   let i=a+0
   if [ $? = 0 ]
     then
       echo "该数为整数"
       let b=i%2
     if [ $b = 0 ]
       then
        echo "该数是偶数"
       else
         echo "该数是奇数"
       fi
    else
      echo "该数不是整数"
fi
fi

[root@localhost ~]# ./demo4.sh 
请输入一个数0
该数为整数
[root@localhost ~]# ./demo4.sh 
请输入一个数5
该数为整数
该数是奇数
[root@localhost ~]# ./demo4.sh 
请输入一个数4
该数为整数
该数是偶数

image.png

image.png

实验五

用if 语句判断主机是否存活

[root@localhost ~]# vim demo2.sh 

#!/bin/bash
#判断主机是否存活
ping -m 1 -c 3  $1 &> /dev/null

if [ $? -eq 0 ]
 then
   echo "主机存活"
else
 echo "主机阵亡"
fi

[root@localhost ~]# ./demo2.sh 
主机阵亡
[root@localhost ~]# ./demo2.sh 192.168.1.10
主机存活

image.png

image.png

实验六

用case语句在/etc/init.d/目录中写一个firewalld脚本,并加入到系统服务管理中(#chkconfig: 2345 99 20)使能够使用 service firewalld start|stop|restart|status 来管理firewalld服务,要求如果命令选项不对,则提示 “用法:$0{start|stop|status|restart}”。

[root@localhost ~]# vim demo5.sh

#!/bin/bash
read -p "管理防火墙{start|stop|restart|status}" firewalld
case $firewalld in
start)
 systemctl start firewalld
 echo "防火墙已开启"
;;

stop)
 systemctl stop firewalld
echo "防火墙已关闭"
 ;;
restart)
 systemctl restart firewalld
echo "防火墙已重启"
;;
status)
 systemctl status firewalld
echo "查看状态"
;;
*)
echo "用法$0{start|stop|restart|status}"
esac

[root@localhost ~]# bash demo5.sh 
管理防火墙{start|stop|restart|status}start
防火墙已开启
[root@localhost ~]# bash demo5.sh 
管理防火墙{start|stop|restart|status}stop
防火墙已关闭
[root@localhost ~]# bash demo5.sh 
管理防火墙{start|stop|restart|status}restart
防火墙已重启
[root@localhost ~]# bash demo5.sh 
管理防火墙{start|stop|restart|status}status
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since 一 2022-08-29 17:01:39 CST; 6s ago
     Docs: man:firewalld(1)
 Main PID: 8685 (firewalld)
   CGroup: /system.slice/firewalld.service
           └─8685 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid

8月 29 17:01:40 localhost.localdomain firewalld[8685]: WARNING: COMMAND_FAILED: '/...
8月 29 17:01:40 localhost.localdomain firewalld[8685]: WARNING: COMMAND_FAILED: '/...
8月 29 17:01:40 localhost.localdomain firewalld[8685]: WARNING: COMMAND_FAILED: '/...
8月 29 17:01:40 localhost.localdomain firewalld[8685]: WARNING: COMMAND_FAILED: '/...
8月 29 17:01:40 localhost.localdomain firewalld[8685]: WARNING: COMMAND_FAILED: '/...
8月 29 17:01:40 localhost.localdomain firewalld[8685]: WARNING: COMMAND_FAILED: '/...
8月 29 17:01:40 localhost.localdomain firewalld[8685]: WARNING: COMMAND_FAILED: '/...
8月 29 17:01:40 localhost.localdomain firewalld[8685]: WARNING: COMMAND_FAILED: '/...
8月 29 17:01:40 localhost.localdomain firewalld[8685]: WARNING: COMMAND_FAILED: '/...
8月 29 17:01:40 localhost.localdomain firewalld[8685]: WARNING: COMMAND_FAILED: '/...
Hint: Some lines were ellipsized, use -l to show in full.
查看状态
[root@localhost ~]# bash demo5.sh 
管理防火墙{start|stop|restart|status}st
用法demo5.sh{start|stop|restart|status}

image.png image.png