根据鸟哥的ping脚本,我重新修改了一下。用到的知识有:read、Linux按行读取、shell输出效果调整等
其中Linux按行读取文件比较重要,可参看文下链接
1 脚本功能:
批量ping当前路径下文件里面的ip地址,ip地址必须一行行填写
2 注意:
请根据提示运行脚本,确保脚本有执行权限,不能在window上运行
#!/bin/bash # Program # Use ping command to check the network‘s PC state. # History # 2016/04/16 学鸟哥 #环境变量 PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH FILEPATH=`pwd` FILENAME=MLGB METHOD=1 #使用ping确认网络是否通 function FUN_PING { ping -c 1 -w 1 ${IPADDRESS} &> /dev/null && result=0 ||result=1 # 开始显示结果是正确的显示 (UP),没有连通 (DOWN) if [ "$result" == 0 ]; then echo "${IPADDRESS}, is UP." |tee -a ${FILEPATH}/PingResult.csv else echo "${IPADDRESS}, is DOWN."|tee -a ${FILEPATH}/PingResult.csv fi } #循环读取文件2慢速法 function while_read_LINE_bottm(){ if [ -f ${FILEPATH}/${FILENAME} ];then >${FILEPATH}/PingResult.csv while read IPADDRESS do FUN_PING done < ${FILEPATH}/${FILENAME} echo -e "\033[31;1m 执行完成,结果在${FILEPATH}/PingResult.csv里 \033[0m" else echo -e "\033[41;37;5m 找不到文件${FILEPATH}/${FILENAME} \033[0m" fi } #循环读取文件1快速法 function for_in_file(){ if [ -f ${FILEPATH}/${FILENAME} ];then >${FILEPATH}/PingResult.csv for IPADDRESS in `cat ${FILEPATH}/${FILENAME}` do FUN_PING done echo -e "\033[31;1m 执行完成,结果在${FILEPATH}/PingResult.csv里 \033[0m" else echo -e "\033[41;37;5m 找不到文件${FILEPATH}/${FILENAME} \033[0m" fi } case "$1" in help|--help|?) echo "Usage: 这个脚本用来ping文件中的ip的,请确保文件存在,且ip是一行一行的 有两种运行方法:1 sh 脚本名;2 ./脚本名 执行完成后,ping的结果存放在当前路径下的PingResult.csv文件中。 " exit 1 esac #输入参数和基本验证 #清理屏幕 echo -e "\033[2J \033[31;1m " #调整显示样式 #echo -e "\033[31;1m" echo "请确保IPADDRESS的文件和脚本在同一路径" read -t 20 -p "请输入IPADDRESS的文件名: " FILENAME read -t 10 -p "请选择执行速度,1 快;2 慢:,默认为1: " METHOD #恢复默认显示样式 echo -e "\033[0m" #主函数 case "$METHOD" in 1) time for_in_file ;; 2) time while_read_LINE_bottm ;; *) echo -e "\033[41;37;5m 你丫的填错数字了,老子按照最慢的给你执行 \033[0m" time while_read_LINE_bottm esac
点击查看代码
另外自己记录:Linux函数使用return命令时,return code的值不能超过255,一旦超过,则继续从〇开始计算
参考:
时间: 2024-10-10 18:12:06