此链接通往 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