shell脚本案例
前言:以下案例难度会逐渐增加!
01 自动检测服务器的连通性(青铜版)
1 #!/bin/bash 2 i=0 3 while((i<254)) 4 do 5 i=$(($i+1)) 6 ping 192.168.43.$i -w 1 -c 1 >nul 7 if [ $? -eq 0 ];then 8 echo 192.168.43.$i is good! 9 else 10 echo 192.168.43.$i is bad! &>/dev/null 11 fi 12 done
这只是简单的赋予变量进行的案例,使用循环语句,但是缺点就是互动性太低,而且太呆板了,要是ip段不同,那不是会很麻烦,大家想想,有没有灵活的方法,人肉输入ip来检测?
02 自动检测服务器的连通性(白银版)(人肉输入版)
1 #!/bin/bash 2 ping 192.168.43.$1 -w 1 -c 1 >null 3 if [ $? -eq 0 ];then 4 echo 192.168.43.$1 is good! 5 else 6 echo 192.168.43.$1 is bad! 7 fi
只要稍稍把赋值改动一下,就可以实现手动输入ip进行检测。但是就是每次就只能检测一个ip,费时又费力,。要是换成另一种方式呢?将需要检测的ip放到一个文件,调用文件内的内容,是不是就更加方便又高效。
03 自动检测服务器的连通性(黄金版)
前提准备:在root的目录下创建了一个server_ip.txt,保存了需要检测的ip地址。
1 #!/bin/bash 2 i=/root/server_ip.txt 3 for line in `cat $i` 4 do 5 if [ ${#line} -eq 0 ];then 6 continue 7 fi 8 ip=`echo $line|awk '{print $1}'` 9 ping $ip -w 1 -c 1 >null 10 if [ $? -eq 0 ];then 11 echo $ip is good! 12 else 13 echo $ip is bad! 14 fi 15 done
这样就可以轻松、灵活并且批量地检测ip地址,但是这样的输出结果,看起来还是特别的单调,但是good和bad能够更改样式就好。这个是可以实现的哦。
1 #!/bin/bash 2 i=/root/server_ip.txt 3 for line in `cat $i` 4 do 5 if [ ${#line} -eq 0 ];then 6 continue 7 fi 8 ip=`echo $line|awk '{print $1}'` 9 ping $ip -w 1 -c 1 >null 10 if [ $? -eq 0 ];then 11 echo -e $ip is "\033[40;32m good \033[0m!" 12 else 13 echo -e "$ip is \033[40;31m bad \033[0m!" 14 fi 15 done
只需要稍微改动一下字符串的输出样式,就可以得到更加好看的输出结果,如果对输出字体颜色样式不懂,可以参考一下的文章。
https://www.cnblogs.com/HuangJiaPing/articles/17501540.html