[网络安全学习篇32]:Linux脚本编写汇总及应用

引言:我的系列博客[网络安全学习篇]上线了,小编也是初次创作博客,经验不足;对千峰网络信息安全开源的视频公开课程的学习整理的笔记整理的也比较粗糙,其实看到目录有300多集的时候,讲道理,有点怂了,所以我就想到了通过写博客(课程笔记)的形式去学习它,虽然写博客会让我多花几倍的时间去学习它,但是当我完成一篇博客所获得的成就感和你们对于我的认同感,让我很满足,能够鼓励我一天天的坚持下去,也希望和我一起学习本期视频的"同道"们也能给一直坚持下去。我们大家一起加油。由于作者本身也是网络信息安全小白,大部分知识点都是初次接触,出现对其理解不深入,不完整,甚至也会出现错误有问题的地方,希望大家谅解、留言提出指正,同时也欢迎大家来找我一起交流学习!!!

 

往期博客:

第一阶段:

[网络安全学习篇1]:windowsxp、windows2003、windows7、windows2008系统部署(千峰网络安全视频笔记)

[网络安全学习篇24]:漏洞与木马(千峰网络安全视频笔记 p117-p118)

第二阶段:

[网络安全学习篇25]:初识Linux及简单命令

[网络安全学习篇26]:Linux下的命令帮助、压缩、vim、软件安装的学习

[网络安全学习篇27]:Linux操作系统的用户和组、文件及目录权限(千峰网络安全视频笔记 p134-p139)

[网络安全学习篇28]:网络地址的配置 日志文件的管理、备份及日志服务器的搭建

[网络安全学习篇29]:apache与lamp平台的搭建

[网路安全学习篇30]:Nginx和Tomcat服务的搭建、Nginx+Tomcat负载均衡的实现

[网络安全学习篇31]:Linux 防火墙 iptables 中 filter(包过滤防火墙)和 nat(路由转换)详解

[网络安全学习篇32]:Linux脚本编写汇总及应用(本篇)

写到这里,我们千峰网络安全的第二个阶段的学习就到此结束了,学完Linux操作系统之后,感觉学习效果不太好,后期我打算专门出一期Linux的汇总,也算是再强化一下吧,毕竟对于我们学安全的,尤其是后面的渗透测试这一块,对Linux的功底要高。

下期博文:

第三阶段: 

[网络安全学习篇33]:0基础带你入门python

 

目录

 

脚本

一个简单的脚本

实现流程

变量赋值

if判断语句

结构

实例

检测内网主机存活状态

循环语句 for wile

for格式

for实例

wile格式

while实例

检测内网主机存活装态(升级)

case语句

case格式

函数

探测内网主句存活状态(再升级)

Nginx自启动脚本


脚本

Linux中的脚本其实就类似我们在windows系统中编写的批处理,那么我们如何去学习他呢?

我们这里主要通过应对各种场景的要求,编写相应的脚本去实现的过程中,我们去一步步的认识脚本编写的各种语法。这些语法的含义其实在我们以前学过的编程语言中,已经了解了。这里,我们主要是了解和学习其语法结构即可,你会发现,学起来非常轻松,也很有意思......

 

一个简单的脚本

场景设定如下:

上午9点 要求设定eth0网卡 ip

192.168.1.100/24

192.168.1.254

下午2点要求设定eth0网卡 ip

172.16.1.100/24

172.16.1.254

实现流程

新建一个文件

  • vim fixip.sh

 

#!/bin/bash
cd etc/sysconfig/network-scripts/
echo 
echo "DEVICE=eth0" > ifcfg-eth0
echo "TYPE=Ethernet" >> ifcfg-eth0
echo "ONBOOT=yes" >> ifcfg-eth0
echo "BOOTPROTO=static" >> ifcfg-eth0
echo "IPADDR=192.168.1.100" >> ifcfg-eth0
echo "NATMASK=255.255.255.0" >> ifcfg-eth0
echo "GATEWAY=192.168.1.254" >> ifcfg-eth0
ifdown eth0
ifup eth0

这里解释以下:

#!bin/bash   指定用bash解释器来解释脚本语言

添加运行权限

  • chmod +x fixip.sh

执行(在当前目录下)

  • ./fixip.sh

 

公司会随机指定不同的ip进行修改

优化脚本为交互式脚本,就引出了我们下面要讲的变量赋值

 

变量赋值

首先,我们来看一下这几行命令,执行之后的结果

 A 顾名思义就是我们定义的变量了,我们给其赋值,再通过$A调出它所表示的值(字符串)

read指令 结合我们的变量,就可以实现将用户输入的值赋给变量的过程

结构:

read -p " " 变量  

 通过我们的变量和read对前面的脚本进行优化升级,使其更实用且贴合人性化

#!/bin/bash
read -p "please input ipaddr:"IP
read -p "please input netmask:"MASK
read -p "please input gateway:"WAY
cd etc/sysconfig/network-scripts/
echo 
echo "DEVICE=eth0" > ifcfg-eth0
echo "TYPE=Ethernet" >> ifcfg-eth0
echo "ONBOOT=yes" >> ifcfg-eth0
echo "BOOTPROTO=static" >> ifcfg-eth0
echo "IPADDR=$IP" >> ifcfg-eth0
echo "NATMASK=$MASK" >> ifcfg-eth0
echo "GATEWAY=$WAY" >> ifcfg-eth0
ifdown eth0
ifup eth0

注:添加变量之后,echo后面必须是双引号,不能是单引号了

变量前面不要忘了加$

 

if判断语句

结构

if单分支结构

if 条件

then 成立子语句

fi

if 双分支结构

if 条件

then 成立子语句

else 不成立子语句

fi

if 多分支结构

if 条件

then 成立子语句

elif 条件

then 成立子语句

else 不成立子语句

fi

实例

接下来我们编写一个简单的单分支判断脚本

注:Linux中  大于 -gt 小于 -lt 等于 -eq

同样,先创建一个sh文件

  • vim if.sh

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

赋权

  • chmod +x if.sh

再来看一个多分支的例子

#!/bin/bash
read -p "please input a num:"NUM
if [ $NUM -lt 5 ]
then echo "lt"
elif [ $NUM -eq 10 ]
then echo "eq"
else echo "gt"
fi

 

检测内网主机存活状态

我们平时的ping操作,我们可以对其进行修饰,改变其特定的输出显示:

-c 指定其发送几个包

-i 发间隔时间

-w 等待响应时间

那我们的ping语句的结果可以作为if的条件吗?可以

我们要将其输出的结果不显示

&> 文件 将前面的输出结果导入到别的地方

  • ping -c2 -i0.2 -w2 12.34.56.78 &> /dev/null

新建一个文件ping.sh

  • vim ping.sh

#!/bin/bash

if `ping -c2 -i0.2 -w2 12.34.56.79 &> /dev/null`

then echo "yes"

else echo "no"

fi

注:` 这个符号如何在键盘上打出  英文状态下:键盘上数字键1的左边

同样赋权执行

  • chmod +x ping.sh

这里提前声明以下,我们ping的这个ip原来就是通的

 

优化:

#!/bin/bash
read -p "please input ipaddr:"IP
if `ping -c2 -i0.2 -w2 $IP &> /dev/null`
then echo "$IP is up"
else echo "$IP is down"
fi

测试成功

局限性:

我们测试一个主机可以,但是一个网段就不行了

这就要用到我们的循环,下面,我们就来介绍循环语句

 

循环语句 for wile

for和wile的区别

for 根据循环的次数(取值列表)循环

wile 根据条件循环

 我们在屏幕上直接输出{1..10},就可以得到以下结果

for格式

for 变量 in 取值列表

do

    子语句

done

for实例

简单的循环脚本

  • vim xun.sh

我相信大家在之前已经接触过编程语言了,我就不做详细著述了,直接上代码

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

 

 

wile格式

while 条件

do

   子语句

done

while实例

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

注:let NUM++  相当于 let NUM=NUM+!

检测内网主机存活装态(升级)

继续我们回到前面的探测主机存活,这一次我们要实现在真实的环境中,探测局域网的主机存活状态

将我们的网络属性配置到桥接模式

修改网卡配置

  • vim /etc/sysconfig/network-scripts/ifcfg-eth0

  • ifdown eth0
  • ifup eth0

  • vim ping.sh

for实现

#!/bin/bash
NET=10.0.110.
for i in {1..254}
do
    if `ping -c2 -i0.2 -w2 $NET$IP &> /dev/null`
    then echo -e "$NET$IP is \033[31mup\033[0m"
    else echo -e "$NET$IP is \033[32mdown\033[0m"
    fi
done

while实现:

#!/bin/bash
NET=10.0.110.
IP=200
while [$IP -lt 254 ]
    lxxxet IP=IP+1
    if `ping -c2 -i0.2 -w2 $NET$IP &> /dev/null`
    then echo -e "$NET$IP is \033[31mup\033[0m"
    else echo -e "$NET$IP is \033[32mdown\033[0m"
    fi
done


 

case语句

案例

./case.sh centos

redhat

./case.sh redhat

centos

./case xxxx

usage case.sh {redhat|centos}

使用case语句实现以上案例

case $1 in 
redhat)
    echo "centos"
    ;;
centos)
    echo "redhat"
    ;;
*)
    echo "Usage $0 {redhat|centos}"
esac

赋权

  • chmod +x case.sh

case格式

case 变量 in

模式1)

   子语句

   ;;

*)

   子语句

   ;;

esac

 

函数

将一部分代码存储到一个变量中

 

设计一个函数名字为A

运行A时屏幕输出OK

可以通过

echo $?

得到函数的返回值(return)

 

探测内网主句存活状态(再升级)

继续我们回到前面的探测主机存活,这一次我们要实现在真实的环境中,探测局域网的所有主机存活状态

redhat(){
    echo cetos
    return 0
}
centos(){
    echo redhat
    return 0
}
case $1 in 
redhat)
    redhat
    ;;
centos)
    centos
    ;;
*)
    echo "Usage $0 {redhat|centos}"
esac
 

 

分析apache自启动脚本

apache的启动函数

apache的关闭函数

这些是不是看起来很熟悉,都是我们前面学的编写的

接下来我们就来编写nginx的自启动脚本

Nginx自启动脚本

首先我们要在/etc/init.d/目录下编写我们Nginx的启动脚本nginxd

#!/bin/bash
nginx=/usr/local/nginx/sbin/nginx
start(){
    echo "nginx starting .... [OK] "
    $nginx
}
start

优化:

#!/bin/bash
nginx=/usr/local/nginx/sbin/nginx
start(){
    echo "nginx starting .... [OK] "
    $nginx
}
status(){
    if `ss -antpl | grep nginx > /dev/null`
    then echo "nginx starting .... "
    else echo "nginx stoping .... "
    fi
}
stop(){
    echo "nginx stoping .... [OK] "  
    $nginx -s stop

}
case $1 in
start)
    start
    ;;
stop)
    stop
    ;;
restart
    stop
    start
    ;;
*)
    echo "Usage :$0 {start|stop|restart}"
esac

接下来,我们让它永久启动

打开我们编写好的nginxd脚本,添加下面两行

加入chkconfig list

  • chkconfig --add nginxd

默认都是关闭的off

我们将5级别打开on

  • chkconfig --list nginxd on

好了,我们的5级别已经开启了

接下来,我们重启操作系统

  • reboot

可以看到我们的nginx已经自启动了


参考文献:

B站千峰网络信息安全开源视频课程

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

beglage

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

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

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

打赏作者

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

抵扣说明:

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

余额充值