web安全day37(Linux脚本判断和循环,编写脚本实现内网主机存活批量检测)

我自横刀向天笑,去留肝胆两昆仑。这篇文章主要讲述web安全day37:Linux脚本判断和循环,编写脚本实现内网主机存活批量检测相关的知识,希望能为你提供帮助。


判断语句linux中判断使用if来实现。具体语法如下:

if 条件
then 成立子语句
fi


初试,单分支
我们可以写一个最简单的判断语句进行测试。
新建一个if.sh
#!/bin/bash
if [ 3 -lt 5 ]
then echo "yes"
else
echo "no"
fi



【web安全day37(Linux脚本判断和循环,编写脚本实现内网主机存活批量检测)】-lt表示小于,-gt表示大于,-eq表示等于。linux中对于缩进没有严格限制,我们缩进4个字符只是为了自己阅读方便。
注意修改其权限
chomd +x if.sh


运行一下试试

进阶,多分枝
输入一个数,让其和10进行比较。
#!/bin/bash
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。
#!/bin/bash
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
#!/bin/bash
for i in 1..10
do
echo "hello"
done




输出从1到10
#! /bin/bash
for i in 1..10
do
echo $i



还有一种方法
直接使用echo 1..10

while循环
while循环主要根据循环条件进行循环。
while 条件
do
子语句
done


#!/bin/bash
NUM=0
while [ $NUM -lt 10 ]
do
echo $NUM
let NUM++
done




实战:内网多台主机存活测试
for循环方法


#!/bin/bash
for IPin 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循环方法
#!/bin/bash
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
#!/bin/bash
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,不定期更新技术干货。




    推荐阅读