Bash Shell 中的 case 选择语句:

文章目录

      • 1、case 语句介绍:
      • 2、case 语法格式:
      • 3、case 使用例子:


 

        此链接通往 Bash Shell 编程学习的目录导航 ,从入门到放弃,感兴趣的可以去看看:


1、case 语句介绍:

       
        case 选择语句,主要用于对多个选择条件进行匹配输出,与 if…elif 语句结果类似!

        case 通常用于 脚本传递输入参数,打印出输出结果及内容。
       


       

2、case 语法格式:


case 变量 in
   pattern 1)
   语句1
   ;;          
   pattern 2)
   语句2
   ;;
   pattern N)
   语句N
   ;;
   默认语句1(当上面的条件都不满足的时候,执行此语句)
esac

# 注意分号 

解释: 当那个变量的值,满足 pattern 1的时候,执行语句1

 

3、case 使用例子:

使用 case + if 条件判断,实现修改主机名 和 ip 的脚本,非常复杂版本…

使用 case 修改系统配置:

#!/bin/bash
#
#********************************************************
#Author:                     zhengzelin
#Date:                       2020-03-30
#FileName                    test.sh                                                                                                                                                                             
#QQ:                         xxxxxxxx
#********************************************************
echo "***************************************************"
echo "*                                                 *"  
echo "*              1 change_ip                        *"
echo "*                                                 *"  
echo "*              2 change_hostname                  *"
echo "*                                                 *"  
echo "***************************************************"
sleep 1
read -p "请输入你选择的编号:" num
case $num in
1)
     echo -e "\e[1;32myou choose is change_ip...\e[0m"
     sleep 1
     echo "**********************************************************************************"
     echo "*                                                                                *"
     echo "*  1 Ubuntu 更改ip地址 的配置文件是 :/etc/network/interfaces                       *"
     echo "*  2 Centos6 更改ip地址 的配置文件是:/etc/sysconfig/network-scripts/ifcfg-eth*     *"
     echo "*  3 Centos7 更改ip地址 的配置文件是:/etc/sysconfig/network-scripts/ifcfg-ens*     *"
     echo "*                                                                                *"
     echo "**********************************************************************************"
     sleep 1
     read -p "请选择您的操作系统编号:" num1
       if [[ $num1 -eq 1 ]];then
          read -e -p "请输入您更改ip的配置文件(可以使用tab补齐):"path
          read -e -p "请输入您的IP网卡的网卡名(可以使用tab补齐):" NIC
          read -e -p "请输入您要给 $NIC 更改的新ip地址:" newip
          ip1=$( ifconfig $NIC | grep -o "\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}" | head -n1)
          sed -i 's/$ip/$newip/' $path
           if [[ $? -eq 0 ]];then
              echo "修改成功...查看当前IP:"
              ifconfig $NIC
           else
              echo "更改错误,请检查您的输入是否有误..."
              sleep 1
              exit
           fi
       elif [[ $num1 -eq 2 ]];then   
           read -e -p "请输入您更改ip的配置文件(可以使用tab补齐):"path
           read -e -p "请输入您的IP网卡的网卡名(可以使用tab补齐):" NIC
           read -e -p "请输入您要给 $NIC 更改的新ip地址:" newip
           ip1=$( ifconfig $NIC | grep -o "\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}" | head -n1)
           sed -i 's/$ip/$newip/' $path
           if [[ $? -eq 0 ]];then
              echo "修改成功...查看当前IP:"
              ifconfig $NIC
           else 
              echo "更改错误,请检查您的输入是否有误..."
              sleep 1
              exit
           fi
       elif [[ $num1 -eq 3 ]];then        
           read -e -p "请输入您更改ip的配置文件(可以使用tab补齐):"path
           read -e -p "请输入您的IP网卡的网卡名(可以使用tab补齐):" NIC
           read -e -p "请输入您要给 $NIC 更改的新ip地址:" newip
           ip1=$( ifconfig $NIC | grep -o "\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}" | head -n1)
           sed -i 's/$ip/$newip/' $path
           if [[ $? -eq 0 ]];then
              echo "修改成功...查看当前IP:"
              ifconfig $NIC
           else 
              echo "更改错误,请检查您的输入是否有误..."
              sleep 1
              exit
           fi
        else   
           echo "输入的无效...已退出"
        fi
;;      
2)
       echo -e "\e[1;32myou choose is change_hostname...\e[0m"
       sleep 1
       echo "*****************************************************"
       echo "*                                                   *"
       echo "*              1 临时修改                            *"
       echo "*              2 永久修改                            *"
       echo "*                                                   *"
       echo "*****************************************************"
       sleep 1
       read -p "请输入你选择的编号(1 or 2):" num2
         if [[ $num2 -eq 1 ]];then
               read -e -p "请输入您的新主机名:" hostname1
               hostname $hostname1
               read -e -p "是否注销用户立即生效?(请输入 y or n):" answer
               if [[ $answer == y ]];then
                   echo "正在注销用户..."
                   sleep 1
                   echo "请您手动输入 logout 或 exit 来注销用户..."
               elif [[ $answer == n ]];then
                    echo "请您手动注销用户来刷新hostname.."
                    exit
               else
                    echo "没有此选项..."
                    exit
               fi
        elif [[ $num2 -eq 2 ]];then
               sleep 1
               read -e -p "请输入您的新主机名:" hostname1
               read -e -p "请输入您的hostname配置文件(可以使用tab补齐):" hostname2
               cp $hostname2 $hostname2.bak
               echo "您的原文件以及给您备份为:$hostname2.bak"
               echo "$hostname1" > $hostname2
               echo ""
               echo -e "\e[1;32m立即重启会直接刷新hostname,但考虑是工作环境..\e[0m"
               echo " "
               echo -e "\e[1;32m所以,不重启服务器,再配置一个临时主机名,这样下次服务器重启名字就自动变为永久了,...\e[0m"
               echo " "
               sleep 2
               echo -e "\e[1;31m开始配置临时主机名....\e[0m"
               hostname $hostname1
               sleep 2
               echo ""
               echo -e "\e[1;33m临时主机名配置成功,请您输入exit 或 logout 注销用户重新登陆生效...\e[0m"
               sleep 2
               exit
         else 
                  echo "您的输入有误,已退出..."
                  exit
         fi
;;
esac

你可能感兴趣的:(shell)