条件判断结构
当条件满足时执行什么操作,当条件不满足时执行什么操作
&& #逻辑与(并且)
|| #逻辑或(或者)
; #条件之间没有逻辑关系
A && B #当A命令执行成功后才会执行B,如果A执行失败则B不执行
#判断存在且是文件执行拷贝操作(并且关系)
yum -y install vsftpd && systemctl start vsftpd && systemctl enable vsftpd && systemctl status vsftpd
A || B #当A命令执行失败后才会执行B,如果A执行成功则B不执行
#前便命令执行失败,后边命令则执行
ll /opt/xx.txt || touch /opt/xx.txt
A ; B #执行A命令后执行B,两者没有逻辑关系
hostname ; uname -rs ; cat /etc/centos-release
if 条件判断结构
if 单分支语句,只能判断对,不能判断错
#第一种语法结构
if [条件判断];then
条件成立时,执行的命令
fi
#第二种语法结构
if [条件判断]
then
条件成立时,执行的命令
fi
#if单分支示例
vim if1.sh
#!/bin/bash
if [ -f /etc/passwd ];then
echo "存在"
fi
#!/bin/bash
if [ $(rpm -q httpd &> /dev/null; echo $?) -eq 0 ];then
echo 存在
fi
if 双分支语句,既能判断对,也能判断错
if [条件判断];then
条件成立时,执行命令a
else
条件不成立时,执行命令b
fi
#if双分支示例
vim if2.sh
#!/bin/bash
if [ -f /etc/abc.txt ];then
echo '空值'
else
echo '非空'
fi
#!/bin/bash
if [ $(rpm -q httpd &> /dev/null;echo $?) -eq 0 ];then
echo 存在
else
echo 不存在
echo 正在安装软件包
if [ $(yum -y install httpd &> /dev/null;echo $?) -eq 0 ];then
echo 软件包已经安装成功
else
echo 安装失败,没有软件包
fi
fi
#编写参数字的脚本,让计算机产生一个0-9随机数
#$RANDOM环境变量,里边存放的是0-65535之间的随机数
echo $RANDOM
#使用$RANDOM的值对10取余
echo $[RANDOM%10]
#编写猜数字脚本
vim if3.sh
#!/bin/bash
read -p '请输入0-9之间的随机数:' num
num1=$[RANDOM%10]
if [ $num -eq $num1 ];then
echo "恭喜你才对了,奖励一个哇塞女孩!"
else
echo "猜错了,请继续努力,奖品是一个哇塞女孩!"
echo "正确的结果为$num1"
fi
if 多分支语句
if [条件判断1];then
条件1成立时,执行命令a
elif [条件判断2];then
条件2成立时,执行命令b
elif [条件判断3];then
条件3成立时,执行命令c
...省略更多条件
else
所有条件都不成立时,执行命令d
fi
#!/bin/bash
if [ $(rpm -q httpd &> /dev/null;echo $?) -eq 0 ];then
echo 存在
elif [ $(rpm -q vsftpd &> /dev/null;echo $?) -eq 0 ];then
echo vsftpd存在,httpd不存在
echo =====正在安装httpd软件=====
b=''
for ((i=0;$i<=20;i++))
do
let jinshu=$i*5
printf "[%-20s]%d%%\r" $b $jinshu
sleep 0.1
b=#$b
done
echo
if [ $(yum -y install httpd &> /dev/null;echo $?) -eq 0 ];then
echo 软件包httpd已经安装成功!
else
echo httpd安装失败
fi
else
if [ $(yum -y install httpd vsftpd &> /dev/null;echo $?) -eq 0 ];then
echo 软件包httpd、vsftpd已经安装成功!
else
echo httpd安装失败
fi
fi
#编写判断成绩脚本
vim if5.sh
#!/bin/bash
read -p "请输入你的成绩(满分为100分):" num
if [ $num -ge 90 ];then
echo "成绩非常优秀!,奖励一个肤白貌美大长腿,绝世容颜哇塞女孩"
elif [ $num -ge 80 ];then
echo "比较优秀"
elif [ $num -ge 70 ];then
echo "一般一般"
elif [ $num -ge 60 ];then
echo "勉强及格"
else
echo "收拾收拾,回家种地去吧!"
fi
case条件判断结构
case从变量中取值,如果变量中的值与预设的值匹配,则执行对应的命令
#case语法结构
case $变量名 in
值1)
执行的命令xx;; #如果变量中的值等于值1,则执行的命令
值2)
执行的命令yy;; #如果变量中的值等于2,则执行的命令
...省略其他分支
*)
执行的命令zz;; #如果变量中的值都不是以上的值,则执行的命令
esac
#利用case语句安装软件包
#!/bin/bash
read -p "请输入您要安装的软件包(vsftpd|httpd)": i
case $i in
vsftpd)
yum -y install vsftpd &> /dev/null
echo "vsftpd安装成功" ;;
httpd)
yum -y install httpd &> /dev/null
echo "httpd安装成功";;
*)
echo "请输入范围内的软件包!"
esac
#结合if判断的应用案例
#!/bin/bash
if [ $(rpm -q httpd &> /dev/null;echo $?) -eq 0 ];then
echo 存在
elif [ $(rpm -q vsftpd &> /dev/null;echo $?) -eq 0 ];then
read -p "是否要安装软件包httpd(y/n)": i
case $i in
y)
echo =====正在安装httpd软件=====
b=''
for ((i=0;$i<=20;i++))
do
let jinshu=$i*5
printf "[%-20s]%d%%\r" $b $jinshu
sleep 0.1
b=#$b
done
echo
if [ $(yum -y install httpd &> /dev/null;echo $?) -eq 0 ];then
echo 软件包httpd已经安装成功!
else
echo httpd安装失败
fi;;
n)
echo "退出安装";;
esac
else
if [ $(yum -y install vsftpd &> /dev/null;echo $?) -eq 0 ];then
echo 软件包vsftpd已经安装成功!
fi
fi
vim case.sh
#!/bin/bash
read -p "请输入您喜爱的老师(仓老师|波多老师|小泽老师):" xxoo
case $xxoo in
仓老师)
echo "又白又嫩又水润,上楼右转1号房间!";;
波多老师)
echo "前凸后翘,波涛汹涌,上楼右转2号房间!";;
小泽老师)
echo "肤白貌美大长腿,上楼右转3号房间!";;
*)
echo "老师休假了";;
esac
for循环
for循环处理,根据变量的取值,重复执行xx命令
#for循环语法结构
for 变量名 in 值1 值2 值3 值N...
do
执行的命令
done
#编写循环创建用户脚本
vim user.sh
#!/bin/bash
for user in xiaofang xiaowei jiumei alian
do
useradd $user &> /dev/null
echo "$user 创建成功"
echo 1 | passwd --stdin $user &> /dev/null
echo "$user 密码设置成功,初始密码为“1”"
done
#测试企业的服务器联通性
#!/bin/bash
for i in `seq 254`
do
ping -c2 -i0.1 -W1 192.168.0.$i &> /dev/null
if [ $? -eq 0 ];then
echo "192.168.0.$i UP"
else
echo "192.168.0.$i DOWN"
fi
done
#解释:
-c #ping的次数
-i #指定ping的延迟时间
-W #指定超时时间
chmod u+x ping.sh
./ping.sh
#问题:如何将ping的命令结果存储到文件当中,正确的输出结果与错误的输出结果分别单独存储
#!/bin/bash
for i in `seq 254`
do
ping -c2 -i0.1 -W1 192.168.0.$i >> /dev/null
if [ $? -eq 0 ];then
echo "192.168.0.$i UP" >> up.txt
else
echo "192.168.0.$i DOWN" >> down.txt
fi
done
执行脚本并放入后台
./ping.sh &
while循环
死循环,只要条件成立就重复执行命令
#while循环语法结构
while 条件判断
do
执行的命令
done
#使用while循环编写猜数字脚本
vim while1.sh
#!/bin/bash
num=$[RANDOM%10]
while :
do
read -p "请输入0-10之间的数字:" num1
if [ $num -eq $num1 ];then
echo "恭喜你才对了,奖励一个绝世容颜哇塞女孩!"
exit #退出脚本
else
echo "请继续努力,离哇塞女孩还差一步了,加油!"
fi
done
#利用while循环监控网卡进出口流量
vim net_ens32.sh
#!/bin/bash
while :
do
clear #清屏
ifconfig ens32 | head -2 #显示网卡头两行信息
ifconfig ens32 | grep "RX p" #网卡入口流量
ifconfig ens32 | grep "TX p" #网卡出口流量
sleep 1 #休眠01秒
done
#使用while循环编写一个测试整个网段IP地址的联通性脚本
vim while_ping.sh
#!/bin/bash
i=1 #定义一个变量
while [ $i -le 254 ] #循环判断变量的值小于等于254
do
IP="192.168.0.$i" #定义一个变量
ping -c2 -i0.1 -W1 $IP &> /dev/null #输出结果不要
if [ $? -eq 0 ];then #判断上一条命令的结果,如果上一条命令的结果等于0
echo "$IP UP" #输出主机UP
else
echo "$IP DOWN" #输出主机DOWN
fi
let i++ #对变量的值自加1
done