整个脚本是利用控制流(循环语句)实现一个交互的效果,再利用判断和read来实现配置
虽然有200多行代码,细看其实结构很清晰明了,一看就懂!
不过,为了能拿上台面加了很多字体颜色,不止是为了交互体验,也为了让关键字或者提示更加醒目。
同样可以用此结构来实现其他service的配置,个人感觉交互式的配置更直观、更简洁明了,我写了几个类似的交互配置的脚本都经常在工作中使用
代码奉上,后面附个运行截图:
#!/bin/bash
while true
do
clear
echo "———————-menu————————"
echo -e "\033[49;32;1m(1) 重启\033[49;35;1miptables\033[0m "
echo -e "\033[49;32;1m(2) 添加\033[49;35;1miptables\033[49;32;1m规则\033[0m "
echo -e "\033[49;32;1m(3) 删除\033[49;35;1miptables\033[49;32;1m规则\033[0m "
echo -e "\033[49;32;1m(4) 关闭\033[49;35;1miptables\033[0m "
echo -e "\033[49;32;1m(5) 保存\033[49;35;1miptables\033[49;32;1m规则(输完ACL后要记得保存和查看)\033[0m "
echo -e "\033[49;32;1m(6) 查看\033[49;35;1miptables\033[49;32;1m状态\033[0m "
echo -e "\033[49;32;1m(7) 添加\033[49;35;1miptables\033[49;32;1m控制列表\033[0m "
echo -e "\033[49;32;1m(0) 退出脚本\033[0m "
echo "————————————————————"
echo -en "\033[49;31;1m 请输入数字0-7: \033[0m"
read num
if [[ "${num}" =~ "^$" ]];
then
echo -e "\033[49;31;5m 请输入0-7中的数字!或者Ctrl+C退出! \033[0m"
else
if [[ "${num}" =~ "^[a-zA-Z]+$" ]];
then
echo -e "\033[49;31;5m 请输入0-7中的数字!或者Ctrl+C退出! \033[0m"
else
#if [ ${num} -lt 0 -o ${num} -gt 7 ]
if [[ "${num}" =~ "[8-9]" ]];
then
echo -e "\033[49;31;5m 请输入0-7中的数字!或者Ctrl+C退出! \033[0m"
else
if [ "${num}" == "1" ]
then
service iptables restart&
else
if [ "${num}" == "2" ]
#######################################################
then
while true
do
clear
echo "———————-add ACL———————"
echo -e "\033[49;32;1m(1) 针对源\033[49;35;1mIP\033[49;32;1m放行添加\033[0m "
echo -e "\033[49;32;1m(2) 针对服务器\033[49;35;1m端口\033[49;32;1m放行添加 \033[0m "
echo -e "\033[49;32;1m(3) 针对有\033[49;35;1mIP和端口\033[49;32;1m的规则添加\033[49;35;1m(这里要参数IP和端口 例如:1.1.1.1/255.255.0.0 80)\033[0m "
echo -e "\033[49;32;1m(4) 自定义完整语句添加 \033[0m "
echo -e "\033[49;32;1m(0) 返回上一级 \033[0m "
echo "——————————————————————"
echo -en "\033[49;31;1m 请输入数字0-4: \033[0m"
read aclnum
if [[ "${aclnum}" =~ "^$" ]];
then
echo -e "\033[49;31;5m 请输入0-4中的数字!或者Ctrl+C退出! \033[0m"
else
if [[ "${aclnum}" =~ "^[a-zA-Z]+$" ]];
then
echo -e "\033[49;31;5m 请输入0-4中的数字!或者Ctrl+C退出! \033[0m"
else
if [[ "${aclnum}" =~ "[5-9]" ]];
then
echo -e "\033[49;31;5m 请输入0-4中的数字!或者Ctrl+C退出! \033[0m"
elif [ "${aclnum}" == "1" ]
then
read ip
iptables -A INPUT -s ${ip} -p tcp -j ACCEPT
service iptables save
elif [ "${aclnum}" == "2" ]
then
read port
iptables -A INPUT -p tcp -s 0/0 --dport ${port} -j ACCEPT
service iptables save
elif [ "${aclnum}" == "3" ]
then
read ip port
iptables -A INPUT -p tcp -s ${ip} --dport ${port} -j ACCEPT
service iptables save
elif [ "${aclnum}" == "4" ]
then
read addacl
`${addacl}`
service iptables save
else
break
fi
fi
fi
echo -n "是否想继续添加,回车或Y继续,按N返回上一级!: [y/n]:"
read contine
if [ "${contine}" == "n" -o "${contine}" == "N" ]
then
break
fi
done
#######################################################
else
if [ "${num}" == "3" ]
then
while true
do
clear
echo "———————delete ACL———————-"
echo -e "\033[49;32;1m(1) 针对源\033[49;35;1mIP\033[49;32;1m删除\033[0m "
echo -e "\033[49;32;1m(2) 针对服务器\033[49;35;1m端口\033[49;32;1m删除 \033[0m "
echo -e "\033[49;32;1m(3) 针对有\033[49;35;1mIP和端口\033[49;32;1m的规则删除\033[49;35;1m(这里要参数IP和端口 例如:1.1.1.1/255.255.0.0 80)\033[0m "
echo -e "\033[49;32;1m(4) 自定义完整语句删除 \033[0m "
echo -e "\033[49;32;1m(0) 返回上一级 \033[0m "
echo "————————————————-"
echo -en "\033[49;31;1m 请输入数字0-4: \033[0m"
read aclnum
if [[ "${aclnum}" =~ "^$" ]];
then
echo -e "\033[49;31;5m 请输入0-4中的数字!或者Ctrl+C退出! \033[0m"
else
if [[ "${aclnum}" =~ "^[a-zA-Z]+$" ]];
then
echo -e "\033[49;31;5m 请输入0-4中的数字!或者Ctrl+C退出! \033[0m"
else
if [[ "${aclnum}" =~ "[5-9]" ]];
then
echo -e "\033[49;31;5m 请输入0-4中的数字!或者Ctrl+C退出! \033[0m"
elif [ "${aclnum}" == "1" ]
then
read ip
iptables -D INPUT -s ${ip} -p tcp -j ACCEPT
service iptables save
elif [ "${aclnum}" == "2" ]
then
read port
iptables -D INPUT -p tcp -s 0/0 --dport ${port} -j ACCEPT
service iptables save
elif [ "${aclnum}" == "3" ]
then
read ip port
iptables -D INPUT -p tcp -s ${ip} --dport ${port} -j ACCEPT
service iptables save
elif [ "${aclnum}" == "4" ]
then
read deleteacl
`${deleteacl}`
service iptables save
else
break
fi
fi
fi
echo -n "是否想继续删除,回车或Y继续,按N返回上一级!: [y/n]:"
read contine
if [ "${contine}" == "n" -o "${contine}" == "N" ]
then
break
fi
done
###################################################################
else
if [ "${num}" == "4" ]
then
echo -e "`service iptables stop&` "
else
if [ "${num}" == "5" ]
then
echo -e "`service iptables save&`"
else
if [ "${num}" == "6" ]
then
echo -e "`service iptables status&`"
else
##################################################################
if [ "${num}" == "7" ]
then
while true
do
clear
echo "———————list ACL———————-"
echo -e "\033[49;32;1m(1) 看当前正在使用的规则集 \033[0m "
echo -e "\033[49;32;1m(2) 查看每个策略或每条规则、每条链的简单流量统计\033[0m "
echo -e "\033[49;32;1m(3) 查看NAT表 \033[0m "
echo -e "\033[49;32;1m(4) 自定义查看 \033[0m "
echo -e "\033[49;32;1m(0) 退回上一级\033[0m "
echo "————————————————-"
echo -en "\033[49;31;1m 请输入数字0-4: \033[0m"
read aclnum
if [[ "${aclnum}" =~ "^$" ]];
then
echo -e "\033[49;31;5m 请输入0-4中的数字!或者Ctrl+C退出! \033[0m"
else
if [[ "${aclnum}" =~ "^[a-zA-Z]+$" ]];
then
echo -e "\033[49;31;5m 请输入0-4中的数字!或者Ctrl+C退出! \033[0m"
else
if [[ "${aclnum}" =~ "[5-9]" ]];
then
echo -e "\033[49;31;5m 请输入0-4中的数字!或者Ctrl+C退出! \033[0m"
elif [ "${aclnum}" == "1" ]
then
iptables -L
elif [ "${aclnum}" == "2" ]
then
iptables -L -n -v
elif [ "${aclnum}" == "3" ]
then
iptables -L -t nat
elif [ "${aclnum}" == "4" ]
then
read listacl
`${listacl}`
else
break
fi
fi
fi
echo -n "是否想继续查看,回车或Y继续,按N返回上一级!: [y/n]:"
read contine
if [ "${contine}" == "n" -o "${contine}" == "N" ]
then
break
fi
done
################################################
else
exit
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
echo -n "按回车或者Y返回上一级,按N退出程序![y/n]:"
read contine
if [ "${contine}" == "n" -o "${contine}" == "N" ]
then
exit
fi
done
本文出自 “Tuesday” 博客,请务必保留此出处http://cuimk.blog.51cto.com/6649029/1347743
分享到:
相关推荐
### Linux运维工程师核心知识点 #### 一、命令与工具 - **基础命令**: `w` (查看当前登录用户和系统时间)、`df` (显示磁盘分区的使用情况)、`ps` (查看进程状态)、`netstat` (显示网络连接、路由表等信息)、`...
Linux运维笔试面试题的知识点非常丰富,涵盖Linux系统管理、网络服务配置、安全防护、性能调优以及故障排查等多个方面。以下是对提供的部分内容中知识点的详细解读: 1. RAID技术: - RAID 0(条带化):将数据...
Linux是世界上最广泛使用的开源操作系统之一,尤其在服务器领域占据着主导地位。对于想要成为高端运维工程师的人来说,深入理解和掌握Linux的基础知识以及高级操作是至关重要的。以下是对标题和描述中涉及知识点的...
在IT行业中,Linux系统因其稳定性、安全性以及开源特性,在企业级服务器运维中占据了主导地位。而随着业务量的增加和复杂度的提升,手动运维已无法满足高效的需求,因此Python自动化运维应运而生。本资源集合正是...
### 一键配置CentOS iptables防火墙Shell脚本解析 #### 概述 本文将详细介绍一个用于一键配置CentOS系统中的iptables防火墙的Shell脚本。该脚本可以帮助用户简化新装系统的iptables配置过程,使其更加高效且易于...
随着经验的增长,你还会接触到更高级的概念,如cron定时任务、syslog日志分析、用户和组管理、防火墙配置(iptables/ufw)以及性能调优等。通过持续学习和实践,你将成为一个高效的Linux运维专家。文件"Linux基础...
Linux操作系统是全球众多后台开发和运维人员的核心技能之一,其重要性不言而喻。作为类Unix操作系统,Linux遵循开源哲学,拥有丰富的社区支持和自由的软件环境。它在服务器、嵌入式系统、超级计算机以及日常使用的...
"Linux Web服务器配置.rar"这个压缩包很可能包含了实现这一目标所需的各种文档、脚本或配置示例。在这个文件列表中,"LinuxWeb服务器配置"可能是主文档或者指南,涵盖了整个配置过程。 首先,让我们深入了解一下...
Linux是世界上最广泛使用的开源操作系统之一,它为个人用户、企业以及服务器环境提供了强大的基础。Linux课堂笔记的内容通常涵盖了从基础概念到高级应用的各种主题,帮助学习者深入理解这个系统。以下是一些可能涵盖...
Linux学习笔记——入门资料 Linux,作为一款开源、免费的操作系统,因其稳定性和安全性而备受开发者和系统管理员的青睐。这份“Linux学习笔记”旨在帮助初学者快速掌握...好好利用这份资料,开启你的Linux探索之旅吧!
Linux是世界上最受欢迎的开源操作系统之一,它为个人用户、企业以及开发者提供了强大的计算平台。这份“Linux标准教程”旨在帮助初学者系统地学习Linux基础知识,为深入探索这个开放源代码的世界打下坚实的基础。...
8. **安全与防火墙**:理解Linux的用户权限模型,设置SSH安全,配置iptables或firewalld防火墙,是保障系统安全的基本措施。 9. **Linux内核与模块**:深入学习内核原理,了解如何编译定制内核,以及加载和卸载内核...
【描述】"关于Linux详细介绍" 提示我们将要学习的内容是全面的Linux系统知识,包括但不限于系统安装、用户管理、文件系统、网络配置、进程控制、权限管理、脚本编程等。Linux系统的使用和管理是IT专业人士必须掌握的...
10. **Linux安全**:学习如何设置防火墙(如`iptables`),理解SELinux(安全增强型Linux)的工作原理,以及如何使用`ssh`进行安全的远程登录,这些都是保障系统安全的重要知识点。 通过深入学习上述内容,并结合...
Linux操作系统是全球最广泛使用的开源操作系统之一,以其稳定、安全和可定制性著称。这份“Linux课件”旨在帮助初学者对Linux有一个全面而基础的认识,并能够进行基本的操作和使用。以下是一些核心的Linux知识点,...
12. **安全与防火墙**:理解Linux的安全模型,如SELinux,以及iptables防火墙的配置。 这个“Linux操作系统课件”可能包含详细的讲解、实例演示、练习题和项目案例,旨在通过理论与实践结合的方式帮助学习者掌握...
2. **Linux shell**:实验可能涉及使用Bash shell进行交互式命令行操作,包括文件和目录管理(如cd、ls、mkdir、rm等),文本处理(grep、sed、awk)以及脚本编写。 3. **文件权限与所有权**:学生会学习如何使用...
无论你是打算在服务器上部署应用,还是对嵌入式开发感兴趣,这个基础教程都将为你的Linux之旅打下坚实的基础。同时,Linux的学习也是一个不断探索和实践的过程,希望你能在这个过程中发现更多乐趣和挑战。
总的来说,"Red Hat Linux 9系统管理"涵盖了广泛的Linux系统运维知识,不仅涉及操作系统的基本操作,还包括网络配置、服务管理、安全控制等多个层面。通过深入学习和实践,可以提升系统管理员的技能,更好地维护和...
总之,Linux是一门深奥且实用的技术,学习Linux不仅可以提升技术素养,也是通往云计算、服务器管理、系统运维等领域的重要阶梯。通过阅读这份讲义,初学者将能够建立起坚实的Linux基础,逐步探索这个充满无限可能的...