if [ 条件判断式 ] # 判断1,如果成立
then
条件成立执行”命令程序“ # 执行这个 “命令程序”
fi # 没有成立,直接退出
磁盘邮件告警案例
#!/bin/bash
#---------xy!---------
DISK=$(df -h | grep "/dev/mapper/centos-root" | awk '{print $5}' | cut -d"%" -f 1) #摘取磁盘百分比
if [ ${DISK} -ge 2 ]
then
echo "\"/\" 目录磁盘超过2%" #公司中可改为邮件,使用率自定义
fi
if [ 条件判断式 ] #条件判断,如果成立
then
条件成立执行”命令程序1“ #执行程序1
else
条件不成立执行”命令程序2“ #执行程序2
fi
检查Apache状态案例
#!/bin/bash
#---------xy!---------
CHECK=$(netstat -anpt | grep "httpd" | grep "80" | awk '{print $6}') #检查http的端口是否是LISTEN
#CHECK=$(nmap -sT 192.168.10.1 | grep "http" | grep "80/tcp" | awk '{print $2}') #-s扫描 -T所有tcp
if [ "${CHECK}" == "LISTEN" ] #判断LISTEN
then
echo "$(date) 正在运行!" >> /root/acc.log #执行正在运行语句,追加到acc.log
else
systemctl start httpd >> /root/err.log #启动httpd,追加到err.log
echo "$(date) 正在启动!" >> /root/err.log #输出信息,追加到err.log
fi
if [ 条件判断式1 ]
then
条件1成立执行”命令程序1“
elif [ 条件判断式2 ]
then
条件2成立执行”命令程序2“
elif [ 条件判断式3 ]
then
条件3成立执行”命令程序3“
elif [ 条件判断式n ]
then
条件n成立执行”命令程序n“
#...省略更多,,,
else
条件判断式都不成立,最后执行此命令程序
fi
文件或目录检查案例
#!/bin/bash
#---------xy!---------
read -p "请输入文件名:" FILE #输入的信息
if [ -z "$FILE" ] #判断是否为空
then
echo "您未输入任何字符串,文件或目录等"
exit 1 #可以用echo $?进行判断
elif [ -d "$FILE" ] #判断是否为目录
then
echo "这是一个目录"
exit 2
elif [ -f "$FILE" ] #判断是否为文件
then
echo "这是个文件"
exit 3
else
echo “$FILE 是其他字符串,特殊字符等” #否则输出其他
exit 4
fi
case $变量值 in
"变量1")
命令序列1
;;
"变量2")
命令序列2
;;
#...省略更多,,,
* )
都不是执行此命令
;;
esac
Apache服务启动脚本案例
#!/bin/bash
#---------xy!---------
case $1 in
start)
systemctl $1 httpd
echo "$(date) Apache服务已启用!"
;;
stop)
systemctl $1 httpd
echo "$(date) Apache服务已停止!"
;;
status)
#systemctl $CASE httpd
CHECK=$(nmap -sT 192.168.10.1 | grep "http" | grep "80/tcp" | awk '{print $2}') #判断httpd状态,直接摘取状态对比
if [ "${CHECK}" == "open" ]
then
echo "$(date) Apache服务正在运行!"
else
echo "$(date) Apache服务未启用!"
fi
;;
restart)
systemctl $1 httpd
echo "$(date) Apache服务已重启!"
;;
*)
echo "只能使用,start,stop,restart,status参数"
esac
for 变量 in 值1、2、3、4....
do
执行程序
done
for (( 初始值;循环控制条件;变量变化))
do
执行程序
done
注:
1、初始值:循环开始时,赋予某个变量的初始值,如 i=1 ;
2、循环控制条件:指定循环次数,如 i<=50 ,循环会到此结束;
3、变量变化:每次变量循环的变化,如 i=i+1 ,表示每次 i 的值都加1.
for 循环批量添加用户
[root@localhost ~]# cat << EOF >> name.txt
> zhangsan
> lisi
> wangwu
> xy
> liming
> EOF
#!/bin/bash
#---------xy!---------
for m in `cat name.txt`
do
useradd $m &>>/dev/null
echo "123123" | passwd --stdin $m &>>/dev/null
done
#!/bin/bash
#---------xy!---------
s=0
for (( i=1;i<=100;i=i+1 )) #i自增但不超过100
do
s=$(( $s+$i ))
done
echo "1+2+3+4+...+100=$s" #输出和
批量ping主机案例
#!/bin/bash
#---------xy!---------
#for i in {1..254}
for i in {1,2,3,4,}
do
{ #{}&,将大括号里面的内容放入后台去执行
ip=192.168.10.$i
ping -c3 -i0.2 -W3 $ip &>> /dev/null
if [ $? -eq 0 ]
then
echo "$(date +%Y-%m-%d,%H:%M:%S) $ip is up" >> up-ip.txt
else
echo "$(date +%Y-%m-%d,%H:%M:%S) $ip is down" >> down-ip.txt
fi
}&
done
wait #等待前面内存执行完毕,在执行以下内容
echo "检测完毕,成功地址在up-ip.txt中"
echo "失败地址在down-ip.txt中"
while [ 条件判断式 ]
do
执行程序
done
批量创建用户案例
#!/bin/bash
#---------xy!---------
NAME="zhangsan" #名称
XY=1
while [ $XY -le 20 ] #创建个数
do
useradd ${NAME}$XY &>> /dev/null
echo "123123" | passwd --stdin ${NAME}$XY &>> /dev/null
let XY++
done
#!/bin/bash
#---------xy!---------
i=1
s=0
while [ $i -le 100 ] #while循环小于等于100
do
s=$(( $s+$i ))
i=$(( $i+1 ))
done
echo "$s"
until [ 条件判断式 ]
do
执行程序
done
until 对于 while区别
#!/bin/bash
#---------xy!---------
i=1
s=0
until [ $i -gt 100 ] #until大于100停止循环
do
s=$(( $s+$i ))
i=$(( $i+1 ))
done
echo "$s"
exit 返回值
exit 应用案例
#!/bin/bash
#---------xy!---------
for i in {1,2,3}
do
echo "192.168.10.$i"
done
exit3 #输出指定返回值,默认成功为0
#!/bin/bash
#---------xy!---------
for i in {2,3,4,5,6}
do
if [ "$i" -eq 4 ]
then
break #直接退出程序
fi
echo "$i"
done
continue 应用案例
#!/bin/bash
#---------xy!---------
for i in {2,3,4,5,6}
do
if [ "$i" -eq 4 ]
then
continue #跳过此次循环
fi
echo "$i"
done