web安全day37:Linux脚本判断和循环,编写脚本实现内网主机存活批量检测
Posted 小梁L同学
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了web安全day37:Linux脚本判断和循环,编写脚本实现内网主机存活批量检测相关的知识,希望对你有一定的参考价值。
判断语句
linux中判断使用if来实现。具体语法如下:
if 条件
then 成立子语句
fi
初试,单分支
我们可以写一个最简单的判断语句进行测试。
新建一个if.sh
if [ 3 -lt 5 ]
then echo "yes"
else
echo "no"
fi
-lt表示小于,-gt表示大于,-eq表示等于。linux中对于缩进没有严格限制,我们缩进4个字符只是为了自己阅读方便。
注意修改其权限
chomd +x if.sh
运行一下试试
进阶,多分枝
输入一个数,让其和10进行比较。
read -p "please input a num:" NUM
if [ $NUM -lt 10 ]
then echo "lt"
elif [ $NUM -eq 10 ]
echo "eq"
else
echo "gt"
fi
实战:内网单台主机存活测试
ping -c2 -i0.2 -W2 192.168.1.1 &> /home/result.txt
这条命令表示ping 192.168.1.1时只发送两个测试包,间隔0.2s,对于响应包最多等待2s,然后将输出结果不显示在屏幕上,而是保存在/home/result.txt中。
根据这条命令写一个带有条件判断语句的脚本pctest.sh。
read -p "please input the ip:" IP
if `ping -c2 -i0.2 -W2 $IP &>/home/result.txt`
then echo "yes"
else echo "no"
fi
循环语句
for循环
for循环主要根据循环次数进行循环。
for 变量 in 取值列表
do
子语句
done
写一个for循环脚本forxunhuan.sh
for i in 1..10
do
echo "hello"
done
输出从1到10
for i in 1..10
do
echo $i
还有一种方法
直接使用echo 1..10
while循环
while循环主要根据循环条件进行循环。
while 条件
do
子语句
done
NUM=0
while [ $NUM -lt 10 ]
do
echo $NUM
let NUM++
done
实战:内网多台主机存活测试
for循环方法
for IP in 1..254
do
if `ping -c2 -i0.2 -W2 192.168.1.$IP &> /home/result`
then echo -e "192.168.1.$IP is \\033[32mup\\033[0m"
else echo -e "192.168.1.$IP is \\033[31mdown\\033[0m"
fi
done
while循环方法
IP=1
while [ $IP -lt 254 ]
do
if `ping -c2 -i0.2 -W2 192.168.1.$IP &> /home/result`
then echo -e "192.168.1.$IP is \\033[32mup\\033[0m"
else echo -e "192.168.1.$IP is \\033[31mdown\\033[0m"
fi
let IP++
done
注意
\\033[表示颜色渲染
32m是绿色渲染
31m是红色渲染
0m是颜色渲染停止
case语句
case 变量 in
模式1)
子语句
;;
*)
子语句
esac
case $1 in
redhat)
echo "centos"
;;
centos)
echo "redhat"
;;
*)
echo "Useage $0 redhat|centos"
esac
函数
将一部分代码保存在变量中。
设计一个函数A,运行A的时候屏幕输出ok
[root@bogon home]# A()
> echo ok
> echo yes
> return 0
>
echo $?//查看上一次函数执行后的成果,即返回值
配合case语句使用
[root@bogon home]# cat case.sh
CASE1()
echo this is case1
return 0
CASE2()
echo this is case2
return 0
case $1 in
c1)
CASE1
;;
c2)
CASE2
;;
esac
这其实就是linux中带有后缀命令的基本格式
比如我们输入
service httpd status
如果输入
service httpd xxx
说明后缀是确定的。
实战:给nginx添加启动停止脚本
我们之前学习过nginx,知道nginx的启动和停止是没有service服务支持的,需要我们手动开始和停止
我们可以通过case和函数的配合使用脚本来进行。
[root@bogon home]# cat nginxd.sh
nginx=/usr/local/nginx/sbin/nginx
start()
echo "nginx starting ..... [ok]"
$nginx
stop()
echo "nginx stopping ..... [ok]"
$nginx -s stop
status()
if `ss -anptl | grep nginx > /home/result`
then echo "nginx starting ...."
else echo "nginx stop ...."
fi
case $1 in
start)
start
;;
stop)
stop
;;
status)
status
;;
esac
欢迎关注博主的公众号:旁骛OtherThing,不定期更新技术干货。
以上是关于web安全day37:Linux脚本判断和循环,编写脚本实现内网主机存活批量检测的主要内容,如果未能解决你的问题,请参考以下文章
Linux | shell脚本-条件判断if和循环语句for
#yyds干货盘点# web安全day34:一步一步学习Linux防火墙
#yyds干货盘点# web安全day26:今天,算是把linux的用户管理弄明白了