目录
脚本
什么是脚本?作用?
Linux中的脚本其实就类似我们在windows系统中编写的批处理,那么我们如何去学习他呢?
从上往下一次执行,有错不会执行,跳到下一条命令
我们这里主要通过应对各种场景的要求,编写相应的脚本去实现的过程中,我们去一步步的认识脚本编写的各种语法。这些语法的含义其实在我们以前学过的编程语言中,已经了解了。这里,我们主要是了解和学习其语法结构即可,你会发现,学起来非常轻松,也很有意思......
一个简单的脚本
场景设定如下:
上午9点 要求设定eth0网卡 ip
IP:192.168.1.100/24
网关:192.168.1.254
下午2点要求设定eth0网卡 ip
IP:172.16.1.100/24
网关:172.16.1.254
实现流程:
笨办法:
①先把ifcfg-eth0文件清空:echo "" > /etc/sysconfig/network-scripts/ifcfg-eth0
②echo "DEVICE=eth0" >> /etc/sysconfig/network-scripts/ifcfg-eth0
echo "TYPE=Ethernet" >> /etc/sysconfig/network-scripts/ifcfg-eth0
echo "ONBOOT=yes" >> /etc/sysconfig/network-scripts/ifcfg-eth0
echo "BOOYPROTO=static" >> /etc/sysconfig/network-scripts/ifcfg-eth0
echo "IPADDR=192.168.1.100" >> /etc/sysconfig/network-scripts/ifcfg-eth0
echo "NETMASK=255.255.255.0" >> /etc/sysconfig/network-scripts/ifcfg-eth0
echo "GATEWAY=192.168.1.254" >> /etc/sysconfig/network-scripts/ifcfg-eth0
③先关了:ifdown eth0,再开启:ifup eth0下午还要再输一遍,改为172
用脚本:
①先建立一个文件 vim fixip.sh(因为要实现修改ip功能,见名知义,后缀为sh,因为是shell脚本编写)
②在脚本的第一行是声明这个脚本是用什么命令解释器来运行的,比如是sh命令解释器,就要写sh命令解释器的位置(/bin/sh),如果是bash就是写(/bin/bash),井号开头
第二行第三行也是井号开头,分别写上这个脚本的作用以及创建时间,联系方式(不写也行)
③怎么运行?首先给它一个执行权限
变绿就说明有执行的权限
运行脚本的方法:如果在同一目录就用./去运行——》./fixup.sh
公司会随机指定不同的ip进行修改
优化脚本为交互式脚本,就引出了我们下面要讲的变量赋值
100.1.1.100/24
10.1.1.254
请输入ip地址:
请输入子网掩码:
请输入网关:
变量赋值
A 顾名思义就是我们定义的变量了,我们给其赋值,再通过$A调出它所表示的值(字符串)
[root@Waffle Desktop]# read -p "please input ipaddr:" IP
(大写IP说明这个东西是变量,please input ipaddr是显示内容,显示的内容输入完后就存在变量里面了)
please input ipaddr:10.1.1.1
[root@Waffle Desktop]# echo $IP
10.1.1.1
优化脚本:
在刚刚编写的脚本第二行写上read -p "please input ipaddr:" IP
IF判断语句
if单分支结构
if 条件
then 成立 子语句
fi(结尾要写fi)
案例:判断3是否小于5
注意 [ 后面要写空格,否则错误
if 双分支结构
if 条件
then 成立子语句
else 不成立子语句
fi
案例:判断6是不是小于5
linux中对缩进没有要求
if 多分支结构
if 条件
then 成立子语句
elif 条件
then 成立子语句
else 不成立子语句
fi
案例:判断键盘输入的数字和10的关系
注意:[ 前后一定要有空格
Linux中 大于 -gt 小于 -lt 等于 -eq
实用案例:检测内网主机存活状态
我们平时的ping操作,我们可以对其进行修饰,改变其特定的输出显示:
-c 指定其发送几个包
-i 发间隔时间(s)
-W 等待响应时间(s)
[root@Waffle Desktop]# ping -c2 -i0.2 -W2 12.34.56.79(要黏在一起写,发两个包,间隔时间0.2s,等待时间2s)
[root@Waffle Desktop]# ping -c2 -i0.2 -W2 12.34.56.79 &> /dev/null(意思是把不管是正确还是错误的输出全部导出到/dev/null,这个文件相当于是一个空洞)
前后加两个点(在数字键盘1的左边,不同于单引号)
优化:
如果想测试一个网段的主机存活,就不太好用了
Shell循环语句(for、while)
for根据取值列表循环
while根据条件进行循环
for循环
格式:
for 变量 in 取值列表
do
子语句
done
案例:屏幕上输出1~10,如何拿for循环实现?
while循环
while 条件
do
子语句
done
案例:屏幕上输出1~3
检测内网主机存活装态(优化版)
继续我们回到前面的探测主机存活,这一次我们要实现在真实的环境中,探测局域网的主机存活状态
将我们的网络属性配置到桥接模式
1、将centos6-1的eth0网卡设置为桥接模式
2、修改网卡配置
[root@Waffle Desktop]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
3、编写脚本
#!/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" 就是把UP变红色 DOWN变绿色
else echo -e "$NET$IP is \033[32mdown\033[0m"
fi
done
换while循环看看
#!/bin/bash
NET=10.1.1.
IP=200
while [ $IP -lt 254 ]do
let 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案例
案例
./case.sh centos
redhat./case.sh redhat
centos./cash.sh xxx
usage case.sh {redhat|centos}
#!/bin/bash
case $1 in
redhat)
echo "centos"
;;
centos)
echo "redhat"
;;
*)--》*表示所有
echo "useage $0 {redhat|centos}"
esac
赋权后执行
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