需求:
通过Linux服务器定时ping验证目标IP地址连通情况。
目标IP地址以TXT文件方式存储在本地。
生成的测试记录包含测试时间、目标IP地址、连通情况。

1、测试目的IP地址列表

39.156.66.18
203.119.129.109
111.30.164.236

在这里插入图片描述

2、批量PING脚本

#!/bin/bash
#
#获取当前时间
datetimevar=`date "+%Y-%m-%d %H:%M:%S"`
#读取IP列表行数
lineNumber=`cat iplist.txt |wc -l`
#设置计数参数
count=0
#循环读取IP并测试
for i in `cat ./iplist.txt`
	do
		#计数器
		count=$((count+1))
		#控制台打印当前进度
		echo "${i} ${count}/${lineNumber}"
		#PING并保留丢包数
		p=`ping -c 1 $i|grep loss|awk '{print $6}'|awk -F "%" '{print $1}'`
			#因为只PING一次,丢包数为0则表示成功,否则失败
			if [ $p -eq 0 ]
				then
					echo "${datetimevar}|${i}|true" >> ./ipcheckdown.txt
				else
					echo "${datetimevar}|${i}|fail" >> ./ipcheckdown.txt
			fi
	done

在这里插入图片描述

3、设置脚本文件运行权限

chmod +x pingtest.sh

在这里插入图片描述

4、执行脚本(回显执行进度)

./pingtest.sh

在这里插入图片描述

5、查看结果

cat ipcheckdown.txt

在这里插入图片描述

6、添加定时任务,设置每分钟运行一次

crontab -e
*/1 * * * * /root/pingtest.sh

在这里插入图片描述

7、运行情况

自动执行后系统提示“您在 /var/spool/mail/root 中有新邮件”
在这里插入图片描述
查看结果
在这里插入图片描述

8、备注:

通过Windows系统编辑的文件在Linux中执行时,若由于文件格式问题导致报错,例如:

(1)脚本字符格式异常:

【/bin/bash^M: 坏的解释器: 没有那个文件或目录】

(2)IP列表格式问题导致脚本读取IP异常:

【:未知的名称或服务- 5 ./pingtest.sh第17行•••】

(3)问题原因:

在Windows下每一行结尾是\n\r,而Linux下则是\n,所以才会有多出来的\r。
修改方式:
使用指令sed -i 's/\r$//' 文件名,将上面的指令会把文件中的\r 替换成空白。

Yunxi.D
2020-06-04
2020-06-10(追加)

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐