case分支结构

case 变量 in
模式1)
     命令序列1
     ;;
模式2)
     命令序列2
     ;;
模式3)
     命令序列3
    ;;
*)
     无匹配后命令序列
    ;;
esac

举例:
# vim case.sh
#! /bin/bash

cat << EOF
Command action
        h       显示命令帮助
        f       显示磁盘分区
        d       显示磁盘挂载
        m       查看内存使用
        u       查看系统负载
        q       退出程序
EOF

read -p "请输入你要使用的功能:" choise

case $choise in

h|H)
cat << EOF
Command action
        h       显示命令帮助
        f       显示磁盘分区
        d       显示磁盘挂载
        m       查看内存使用
        u       查看系统负载
        q       退出程序
EOF
;;

f|F)
    lsblk
      ;;
d|D)
    df -Th
     ;;
m|M)
    free -h
     ;;
u|U)
    uptime
     ;;

q|Q)
    exit
     ;;
*)
    echo "请输入正确选项"
     ;;

esac

 

调用函数:

help(){                     # 函数声明
cat << EOF
Command action
        h       显示命令帮助
        f       显示磁盘分区
        d       显示磁盘挂载
        m       查看内存使用
        u       查看系统负载
        q       退出程序
EOF
}

read -p "请输入你要使用的功能:" choise

case $choise in

h|H)
      help       #函数调用
        ;;

-------------
作业

Command action
    h       显示命令帮助
    n       修改主机名[接受用户输入主机名]
    t        同步时间
    y       配置yum源 [ 配置基础源base,扩展元epel ]
    I        配置静态IP
   p       安装服务[接受用户输入服务名称]
   d       关闭防火墙和selinux
   q       退出
EOF

举例:

#! /bin/bash
help() {
cat <<-EOF
工具箱:
      a     显示命令帮助
      h     修改主机名
      e     配置静态IP地址
      y     配置yum源[base基础源、epel扩展源]
      p     安装服务
      t     时间同步
      f     关闭防火墙和selinux
      q     退出
EOF
}


help

while :
do
read -p "请输入你要选择的服务:" choise

case $choise in 
a|A)
     help
      ;;
h|H)
     read -p "请输入你要修改的主机名:" h
     hostnamectl set-hostname $h && bash
     ;;
e|E)
     read -p "请输入你要修改的静态IP地址:" IP
cat > /etc/sysconfig/network-scripts/ifcfg-ens33 << EOF
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=$IP
GATEWAY=${IP%.*}.2
NETMASK=255.255.255.0
DNS1=8.8.8.8
DNS2=114.114.114.114    
EOF
     systemctl restart network
     if [ $? -eq 0 ];then
        echo "静态IP:$IP 已设置成功"
     else
        echo "静态IP:$IP 设置失败"
        
     fi
;;
y|Y)
    if [ -e /etc/yum.repos.d/CentOS-Base.repo ] && [ -e /etc/yum.repos.d/epel.repo ];then
       echo "base基础源和epel扩展源已存在"
    else
       mv /etc/yum.repos.d/* /opt   &>/dev/null 
       curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo &> /dev/null
       curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo &>/dev/null
       #yum clean all &> /dev/null
       #yum makecache &> /dev/null
       ls /etc/yum.repos.d/
       if [ -e /etc/yum.repos.d/CentOS-Base.repo ] && [ -e /etc/yum.repos.d/epel.repo ];then
          echo "yum源已经配置成功"
       fi
    fi
       ;;
p|P)
     read -p "请输入你要安装的服务:" p
     rpm -q $p &> /dev/null
     if [ $? -eq 0 ];then
       echo "$p 已安装"
     else
       yum install $p -y &> /dev/null 
       if [ $? -eq 0 ];then
          echo "$p 安装成功"
       else  
          echo "$p 安装失败,请检查网络问题或者yum源配置"
       fi
     fi
        ;;
t|T)
     yum install ntpdate -y &> /dev/null
     ntpdate ntp1.aliyun.com &> /dev/null
     if [ $? -eq 0 ];then
        echo "时间已同步"
        date
     else
        echo "请尝试重新同步,或者检查网络问题"
     fi
      ;;
f|F)
    systemctl stop firewalld && systemctl disable firewalld &> /dev/null
    if [ $? -eq 0 ];then
      echo "防火墙已永久关闭"
    fi
    sed -i s/SELINUX=enforcing/SELINUX=disabled/ /etc/selinux/config
    if [ $? -eq 0 ];then
      echo "selinux已永久关闭"
    fi
     ;;
q|Q|quit|exit)
    exit
     ;;
esac
done