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

Posted 小梁L同学

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了web安全day37:Linux脚本判断和循环,编写脚本实现内网主机存活批量检测相关的知识,希望对你有一定的参考价值。


判断语句

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

if 条件
then 成立子语句
fi

初试,单分支

我们可以写一个最简单的判断语句进行测试。

新建一个if.sh

#!/bin/bash
if [ 3 -lt 5 ]
then echo "yes"
else
echo "no"
fi


-lt表示小于,-gt表示大于,-eq表示等于。linux中对于缩进没有严格限制,我们缩进4个字符只是为了自己阅读方便。

注意修改其权限

chomd +x if.sh

运行一下试试

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

进阶,多分枝

输入一个数,让其和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

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

循环语句

for循环

for循环主要根据循环次数进行循环。

for 变量 in 取值列表
do
子语句
done

写一个for循环脚本forxunhuan.sh

#!/bin/bash
for i in 1..10
do
echo "hello"
done


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

输出从1到10

#! /bin/bash
for i in 1..10
do
echo $i

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

还有一种方法

直接使用echo 1..10

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

while循环

while循环主要根据循环条件进行循环。

while 条件
do
子语句
done

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


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

实战:内网多台主机存活测试

for循环方法


#!/bin/bash
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循环方法

#!/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是颜色渲染停止

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


case语句

case 变量 in
模式1)
子语句
;;
*)
子语句
esac

case $1 in 
redhat)
echo "centos"
;;
centos)
echo "redhat"
;;
*)
echo "Useage $0 redhat|centos"
esac


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

函数

将一部分代码保存在变量中。

设计一个函数A,运行A的时候屏幕输出ok

[root@bogon home]#  A()
> echo ok
> echo yes
> return 0
>

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

echo $?//查看上一次函数执行后的成果,即返回值

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

配合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


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

这其实就是linux中带有后缀命令的基本格式

比如我们输入

service httpd status

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

如果输入

service httpd xxx

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

说明后缀是确定的。

实战:给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,不定期更新技术干货。

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


以上是关于web安全day37:Linux脚本判断和循环,编写脚本实现内网主机存活批量检测的主要内容,如果未能解决你的问题,请参考以下文章

Linux | shell脚本-条件判断if和循环语句for

#yyds干货盘点# web安全day34:一步一步学习Linux防火墙

#yyds干货盘点# web安全day26:今天,算是把linux的用户管理弄明白了

Shell脚本根据Hash值判断web服务器页面是不是被更改

linux while和until循环项目案例

#yyds干货盘点# web安全day6:IIS之WEB服务器