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

目录

判断语句

初试,单分支

进阶,多分枝

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

循环语句

for循环

while循环

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

case语句

函数

实战:给nginx添加启动停止脚本


判断语句

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


运行一下试试

进阶,多分枝

输入一个数,让其和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 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是颜色渲染停止


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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

信封同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值