脚本
什么是脚本?脚本的作用
脚本是在一个文件中写上所需要的命令行,按顺序执行,中间有错可能会退出。
脚本格式
vim fixip.sh
脚本格式
#!/bin/bash 第一行声明该脚本是用何命令显示器运行的
第二行写脚本的作用,脚本创建的时间,和联系方式之类的,也可不写
#!/bin/bash
cd /etc/sysconfig/network-scripts/
echo "DEVICE=ens33" > ifcfg-ens33
echo "TYPE=Ethernet" >> ifcfg-ens33
echo "ONBOOT=yes" >> ifcfg-ens33
echo "BOOTPROTO=static" >> ifcfg-ens33
echo "IPADDR=192.168.1.100" >> ifcfg-ens33
echo "NETMASK=255.255.255.0" >> ifcfg-ens33
echo "GATEWAY=192.168.1.254" >> ifcfg-ens33
ifdown ens33
ifup ens33
[root@a ~]# chmod +x fixip.sh //给文件一个执行权限
[root@a ~]# ./fixip.sh //执行
[root@a ~]# ifconfig //查看结果
交互式脚本
交互式脚本涉及变量赋值
read -p "please input ipaddr:" IP //把输入的值给IP
read -p "please input netmask:" MASK
read -p "please input gateway:" WAY
cd /etc/sysconfig/network-scripts/
echo "DEVICE=ens33" > ifcfg-ens33
echo "TYPE=Ethernet" >> ifcfg-ens33
echo "ONBOOT=yes" >> ifcfg-ens33
echo "BOOTPROTO=static" >> ifcfg-ens33
echo "IPADDR=$IP" >> ifcfg-ens33 //IP的值给ipaddr
echo "NETMASK=$MASK" >> ifcfg-ens33
echo "GATEWAY=$WAY" >> ifcfg-ens33
ifdown ens33
ifup ens33
if判断语句
语法缩进无要求
单分支语句
if 语句
then 成立 子语句
fi
#! /bin/bash
if [ 3 -lt 5 ] //'-lt' 表示小于
then echo "yes"
fi
双分支语句
if 语句
then 成立 子语句
else 不成立 子语句
fi
#! /bin/bash
read -p "please input a num:" NUM
if [ $NUM -lt 5 ]
then echo "lt"
elif [ $NUM -eq 5 ]
then echo "eq"
else echo "gt"
fi
ip add // 也可以查看id
ping -c2 -i0.2 -w2 12.34.56.79 //-c 发包数2,-i 间隔时间0.2, -w 等待时间2
ping -c2 -i0.2 -w2 12.34.56.79 &> /dev/null 把导出的信息全部导入进该文档,不显示
vim ping.sh
#! /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 while
for 根据取值列表循环
while根据条件进行循环
for循环
for 变量 in 取值列表 //根据赋值变量的次数 进行子语句的执行1 2 3 4 5…10
do
子语句
done
#! /bin/bash
NET=10.0.110.
for IP 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循环
while 条件
do
子语句
done
NET=10.0.110.
IP=0
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.sh centos
redhat
./case.sh redhat
centos
./case.sh xxxx
usage case.sh{redhat|cenots}
case 语句格式
case 变量 in
模式1)
子语句
;;
*)
子语句
;
esac
case $1 in
redhat)
echo "centos"
;;
centos)
echo "redhat"
;;
*)
echo "Useage $0 {redhat|centos}"
esac
加上函数后的脚本
redhat(){
echo centos
return 0
}
centos(){
echo redhat
return 0
}
case $1 in
redhat)
centos
;;
centos)
redhat
;;
*)
echo "Useage $0 {redhat|centos}"
esac
函数
将一部分代码存储到一个变量中
设计一个函数名字叫A
运行A的时候屏幕输出ok
[root@a ~]# A(){
> echo OK
> }
[root@a ~]# A
杂
root@a ~]# find /etc/ -name httpd //查早名为httpd的文件
chkconfig --list httpd
nginx脚本
#!/bin/bash
#chkconfig: - 84 18
#description:nginx script
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;;
status)
status;;
restart)
stop
start;;
*)echo "Usage :$0 {start|stop|status|restart}"
esac
chkconfig : - 85 15 //表明是接受chkconfig控制,- 代表几个运行级别,85 代表是第几个启动的第几个关闭的,
description:
chkconfig --add nginxd //把nginxd加入到chkconfig的控制下
chkconf --list nginxd //此时就可以看到nginxd的状态了
chkconfig --level 5 nginxd on //让五级别默认是开启的