当前位置: 首页 > news >正文

Shell脚本-DNS域名解析格式化

Shell脚本-DNS域名解析格式化

大家好,我是秋意零。

今天,分享一个Shell脚本。大家不一定用的上,但可以参考;再一个是可以通过下列需求进行练手,初学者可以试试!

脚本还有优化的地方(懒得改了hh)有兴趣得朋友可以简化一下下列脚本。

需求如下:

脚本需要实现下列三个功能,分别是添加、删除和修改。对应下列就是格式化前后的效果。

1) 添加dns解析 
格式化前:openapi-test.qiuyl.com 192.168.200.10
格式化后:dnscmd ./RecordAdd qiuyl.com openapi-test A 192.168.200.102) 修改dns解析 openapi-test.qiuyl.com (修改需要先删除解析,避免有两条记录) 
格式化后:echo y| dnscmd ./RecordDelete qiuyl.com openapi-test A 192.168.200.10
格式化后:dnscmd ./RecordAdd qiuyl.com openapi-test A 192.168.200.113) 删除dns解析 openapi-test.qiuyl.com 192.168.200.11
格式化后:echo y| dnscmd ./RecordDelete qiuyl.com openapi-test A 192.168.200.11

1)目录结构

[root@cd0215 dns_jiexi]# ll
total 4
drwxr-xr-x 2 root root   66 Aug  6 17:53 logs  # 存放日志目录
drwxr-xr-x 2 root root   92 Aug  7 17:53 sources # 存放数据源目录
-rw-r--r-- 1 root root 2836 Aug  7 17:48 start.sh# 源文件格式参考(需严格按照下列格式)
[root@cd0215 dns_jiexi]# cat ./sources/dns-add.txt
openapi-test-1.qiuyl.com 192.168.200.10
openapi-test-2.qiuyl.com 192.168.200.11

2)使用说明

[root@cd0215 dns_jiexi]# sh start.sh 
请输入一个命令参数:[ add | del | update ]

3)脚本源码

#!/bin/bash# 文件名称定义
FILE_ADD="./sources/dns-add.txt"
FILE_DEL="./sources/dns-del.txt"
FILE_UPDATE="./sources/dns-update.txt"
FILE_UPDATE_DEL="./sources/dns-update-del.txt"FILE_ADD_LOG="./logs/dns-add.log"
FILE_DEL_LOG="./logs/dns-del.log"
FILE_UPDATE_LOG="./logs/dns-update.log"# 数据读取 函数
readDate_func(){FILE="$1"# 读取并处理每一行while IFS=' ' read -r DNS_FULL_NAME IP; do# 提取域名DNS_FIREST_NAME=$(echo "$DNS_FULL_NAME" | awk -F. '{print $2"."$3}')DNS_SECOND_NAME=$(echo "$DNS_FULL_NAME" | awk -F. '{print $1}')DNS_IP=$IPif [ $FILE == $FILE_ADD ];thendate_funcecho -e "$TIME dnscmd . \e[96m/RecordAdd\e[0m \e[92m$DNS_FIREST_NAME $DNS_SECOND_NAME A $DNS_IP \e[0m" >> $FILE_ADD_LOGelif [ $1 == $FILE_DEL ];thendate_funcecho -e "$TIME echo y |  dnscmd . \e[96mRecordDelete\e[0m \e[92m$DNS_FIREST_NAME $DNS_SECOND_NAME A $DNS_IP \e[0m" >> $FILE_DEL_LOGelif [ $1 == $FILE_UPDATE_DEL ];thendate_funcecho -e "$TIME echo y |  dnscmd . \e[96mRecordDelete\e[0m \e[92m$DNS_FIREST_NAME $DNS_SECOND_NAME A $DNS_IP \e[0m" >> $FILE_UPDATE_LOGelif [ $1 == $FILE_UPDATE ];thendate_funcecho -e "$TIME dnscmd . \e[96m/RecordAdd\e[0m \e[92m$DNS_FIREST_NAME $DNS_SECOND_NAME A $DNS_IP \e[0m" >> $FILE_UPDATE_LOGfidone < "$FILE"
}date_func(){TIME=`date '+%Y-%m-%d %H:%M:%S'`
}add_func(){readDate_func $FILE_ADD
}del_func(){readDate_func $FILE_DEL
}update_func(){readDate_func $FILE_UPDATE_DELreadDate_func $FILE_UPDATE
}# 判断用户对应操作
if [ -z "$1" ];thenecho -e "请输入一个命令参数:\e[92m[ add | del | update ]\e[0m"exit 6
fiif [ $1 == "add" ];thenif [ -f "$FILE_ADD"  ];thenadd_funcif [ $? == "0" ];thenecho -e "add command execution \e[92msuccessful!\e[0m"echo "logs dir: $FILE_ADD_LOG"fielseecho -e "$FILE_ADD \e[93m文件不存在,请创建!\e[0m"exit 1fi
elif [ $1 == "del" ];thenif [ -f "$FILE_DEL"  ];thendel_funcif [ $? == "0" ];thenecho -e "del command execution \e[92msuccessful!\e[0m"echo "logs dir: $FILE_DEL_LOG"fielseecho -e "$FILE_DEL \e[93m文件不存在,请创建!\e[0m"exit 2fi
elif [ $1 == "update" ];thenif [ -f "$FILE_UPDATE_DEL"  ];thenecho -n ""elseecho -e "$FILE_UPDATE_DEL \e[93m文件不存在,请创建!\e[0m"exit 4fiif [ -f "$FILE_UPDATE"  ];thenupdate_funcif [ $? == "0" ];thenecho -e "update command execution \e[92msuccessful!\e[0m"echo "logs dir: $FILE_UPDATE_LOG"fielseecho -e "$FILE_UPDATE \e[93m文件不存在,请创建!\e[0m"exit 5fi
elseecho -e "请输入正确的操作指令:\e[92m[ add | del | update ]\e[0m"
fi

End

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Element学习(布局组件、案例操作)(4)
  • Android:Uniapp平台中接入即构RTC+相芯美颜
  • Linux 下 perf 的使用
  • Kafka整合SpringBoot
  • HookNet- 用于病理全切片图像的多分辨率语义分割模型|顶刊精析·24-08-08
  • 9.1 迭装饰器的定义与使用:给你的 Python 代码加点“魔法”
  • 服务器启动jar包的时候报”no main manifest attribute“异常(快捷解决)
  • 数据加密-AES数据加密及C#实现
  • 为什么在网页编辑文字时键盘输入换行要停顿一下网页才显示
  • MaxKB:基于 LLM大语言模型的知识库问答系统实操
  • 部署服务器项目及发布
  • Spring统一处理请求响应与异常
  • QT 布局管理器之QHBoxLayout
  • C语言(16)指针(iv)
  • 当科幻照进现实:Figure 02机器人震撼发布!
  • 4. 路由到控制器 - Laravel从零开始教程
  • cookie和session
  • C学习-枚举(九)
  • in typeof instanceof ===这些运算符有什么作用
  • Java知识点总结(JavaIO-打印流)
  • Lsb图片隐写
  • Mysql优化
  • nfs客户端进程变D,延伸linux的lock
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • quasar-framework cnodejs社区
  • Spring Cloud中负载均衡器概览
  • Travix是如何部署应用程序到Kubernetes上的
  • vue-cli3搭建项目
  • 产品三维模型在线预览
  • 动态魔术使用DBMS_SQL
  • 复习Javascript专题(四):js中的深浅拷贝
  • 聚簇索引和非聚簇索引
  • 蓝海存储开关机注意事项总结
  • 力扣(LeetCode)56
  • 前端面试题总结
  • 数据结构java版之冒泡排序及优化
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • ​queue --- 一个同步的队列类​
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • #stm32整理(一)flash读写
  • (13):Silverlight 2 数据与通信之WebRequest
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (搬运以学习)flask 上下文的实现
  • (十六)一篇文章学会Java的常用API
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (转)程序员技术练级攻略
  • .gitignore文件忽略的内容不生效问题解决
  • .net Application的目录
  • .net 反编译_.net反编译的相关问题
  • .NET/C# 的字符串暂存池
  • .net2005怎么读string形的xml,不是xml文件。
  • .NET编程C#线程之旅:十种开启线程的方式以及各自使用场景和优缺点