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

ops/2024/12/22 9:05:30/

ShellDNS_0">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


http://www.ppmy.cn/ops/91994.html

相关文章

【Android】ContentProvider基本概念

ContentProvider Android权限机制详解 <manifest xmlns:android"http://schemas.android.com/apk/res/android"package"com.example.broadcasttest"> <uses-permission android:name"android.permission.RECEIVE_BOOT_COMPLETED" />…

计算机网络408考研 2014

1 计算机网络408考研2014年真题解析_哔哩哔哩_bilibili 1 111 1 11

Python | Leetcode Python题解之第326题3的幂

题目&#xff1a; 题解&#xff1a; class Solution:def isPowerOfThree(self, n: int) -> bool:return n > 0 and 1162261467 % n 0

SpringMVC学习笔记---带你快速入门和复习

一、初识SpringMVC 1.1、什么是SpringMVC 1.1.1、什么是MVC MVC是一种软件架构模式&#xff08;是一种软件架构设计思想&#xff0c;不止Java开发中用到&#xff0c;其它语言也需要用到&#xff09;&#xff0c;它将应用分为三块&#xff1a; M&#xff1a;Model&#xff0…

牛客周赛 Round 54

清楚姐姐的糖葫芦 思路&#xff1a;模拟 void solve() {string s; cin >> s;int ans 0;for (auto i : s) ans (i o);cout << ans << \n; }清楚姐姐买竹鼠 思路&#xff1a;全买 b b b&#xff0c;全买 a a a和混合买的取最小值 void solve() {int a, …

51单片机个人学习笔记16(红外遥控)

前言 本篇文章属于STC89C52单片机&#xff08;以下简称单片机&#xff09;的学习笔记&#xff0c;来源于B站教学视频。下面是这位up主的视频链接。本文为个人学习笔记&#xff0c;只能做参考&#xff0c;细节方面建议观看视频&#xff0c;肯定受益匪浅。 [1-1] 课程简介_哔哩…

Java基础入门15:算法、正则表达式、异常

算法&#xff08;选择排序、冒泡排序、二分查找&#xff09; 选择排序 每轮选择当前位置&#xff0c;开始找出后面的较小值与该位置交换。 选择排序的关键&#xff1a; 确定总共需要选择几轮&#xff1a;数组的长度-1。 控制每轮从以前位置为基准&#xff0c;与后面元素选择…

C 语言学习(5) ---- 汇编语法基础

目录 汇编语言基础x86 体系的寄存器说明Intel 和 AT&T 语法"helloworld" 汇编程序分析指令和伪指令TBD 汇编语言基础 汇编程序基本由 4 种类型的组件组成&#xff1a;指令&#xff08;instruction&#xff09;、伪指令&#xff08;directive&#xff09;、标号&…