条件判断结构
当条件满足时执行什么操作,当条件不满足时执行什么操作
&& #逻辑与(并且)
|| #逻辑或(或者)
; #条件之间没有逻辑关系

A && B  #当A命令执行成功后才会执行B,如果A执行失败则B不执行
#判断存在且是文件执行拷贝操作(并且关系)
[root@localhost ~]# [ -f /opt/test.txt ] && cp /opt/test.txt /root
[root@localhost ~]# ls /root


[root@thinkmo ~]# rpm -q vsftpd || yum -y install vsftpd && systemctl start vsftpd && systemctl enable vsftpd && systemctl status vsftpd

#第一条命令执行失败,后边命令不执行
[root@localhost ~]# [ -f /etc/xxoo ] && cp /etc/passwd /opt
[root@localhost ~]# [ -f /etc/xxoo ] && cp /etc/xxoo /opt
[root@localhost ~]# ls /opt

A || B  #当A命令执行失败后才会执行B,如果A执行成功则B不执行
#前便命令执行失败,后边命令则执行
[root@localhost ~]# [ -f /opt/xxoo ] || touch /opt/xxoo.txt
[root@localhost ~]# ls /opt
abc.tar.bz2  passwd  xxoo.txt

#前边命令执行成功,后便命令则不执行
[root@localhost ~]# [ -f /etc/fstab ] || touch /opt/fs.txt
[root@localhost ~]# ls /opt

A ;  B  #执行A命令后执行B,两者没有逻辑关系
[root@localhost ~]# touch /mnt/xx.txt ; touch /opt/xx.txt
[root@localhost ~]# ls /mnt
centos  xx.txt
[root@localhost ~]# ls  /opt
abc.tar.bz2  abc.txt  fs.txt  pass.txt  passwd  xxoo.txt  xx.txt
[root@localhost ~]# touch /opt/oo.txt ; rm -rf /opt/*
[root@localhost ~]# ls /opt
[root@localhost ~]# touch /opt/oo.txt ; rm -rf /opt/* ; touch /opt/xx.txt ; rm -rf /mnt/xx.txt
[root@localhost ~]# ls /opt
xx.txt
[root@localhost ~]# ls /mnt/

if 条件判断结构
if 单分支语句,只能判断对,不能判断错
#第一种语法结构
if [条件判断];then
   条件成立时,执行的命令
fi

#第二种语法结构
if [条件判断]
  then
   条件成立时,执行的命令
fi

#if单分支示例
[root@localhost yunwei]# vim if1.sh 
#!/bin/bash
if [ -n /etc/passwd ];then
        echo "非空"
fi

[root@localhost yunwei]# chmod u+x if1.sh 
[root@localhost yunwei]# ./if1.sh 
非空

#只能判断对,不能判断错
[root@localhost yunwei]# vim if1.sh 
#!/bin/bash
if [ -z /etc/passwd ];then
        echo "非空"
fi


if 双分支语句
if [条件判断];then
     条件成立时,执行命令a
  else
     条件不成立时,执行命令b
fi

#if双分支示例
[root@localhost yunwei]# vim if2.sh 
#!/bin/bash
if [ -z /etc/passwd ];then
        echo '空值'
  else
        echo '非空'
fi

[root@localhost yunwei]# chmod u+x if2.sh 
[root@localhost yunwei]# ./if2.sh 
非空

#编写参数字的脚本,让计算机产生一个0-9随机数
#$RANDOM环境变量,里边存放的是0-65535之间的随机数
[root@localhost yunwei]# echo $RANDOM
28484
[root@localhost yunwei]# echo $RANDOM
5440
[root@localhost yunwei]# echo $RANDOM
29651
[root@localhost yunwei]# echo $RANDOM
21747
[root@localhost yunwei]# echo $RANDOM
24494

#使用$RANDOM的值对10取余
[root@localhost yunwei]# echo $[RANDOM%10]
4
[root@localhost yunwei]# echo $[RANDOM%10]
2
[root@localhost yunwei]# echo $[RANDOM%10]
5
[root@localhost yunwei]# echo $[RANDOM%10]
3
[root@localhost yunwei]# echo $[RANDOM%10]
9
[root@localhost yunwei]# echo $[RANDOM%10]
1
[root@localhost yunwei]# echo $[RANDOM%10]
0
[root@localhost yunwei]# echo $[RANDOM%10]
3
[root@localhost yunwei]# echo $[RANDOM%10]
2

#编写猜数字脚本
[root@localhost yunwei]# vim if3.sh
#!/bin/bash
read -p '请输入0-9之间的随机数:' num
num1=$[RANDOM%10]
if [ $num -eq $num1 ];then
        echo "恭喜你才对了,奖励一个哇塞女孩!"
 else
        echo "猜错了,请继续努力,奖品是一个哇塞女孩!"
        echo "正确的结果为$num1"
fi

#安装软件包脚本
root@localhost yunwei]# vim if4.sh 
#!/bin/bash
if [ `rpm -q vsftpd &> /dev/null ; echo $?` -eq 0 ];then
        systemctl start vsftpd
        systemctl enable vsftpd &> /dev/null
        echo "软件包以安装,并设置随机自启"
 else
        yum -y install vsftpd &> /dev/null
        systemctl start vsftpd
        systemctl enable vsftpd &> /dev/null
        echo "软件包以安装上,并设置随机自启"
fi

[root@localhost yunwei]# chmod u+x if4.sh 
[root@localhost yunwei]# ./if4.sh 
软件包以重新安装上,并设置随机自启

if 多分支语句
if [条件判断1];then
      条件1成立时,执行命令a
elif [条件判断2];then
      条件2成立时,执行命令b   
elif [条件判断3];then
      条件3成立时,执行命令c
...省略更多条件
else
      所有条件都不成立时,执行命令d
fi

#编写判断成绩脚本
[root@localhost yunwei]# 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

[root@localhost yunwei]# chmod u+x if5.sh 
[root@localhost yunwei]# ./if5.sh 
请输入你的成绩:66
勉强及格
[root@localhost yunwei]# ./if5.sh 
请输入你的成绩:55
收拾收拾,回家种地去吧!
[root@localhost yunwei]# ./if5.sh 
请输入你的成绩:0
收拾收拾,回家种地去吧!
[root@localhost yunwei]# ./if5.sh 
请输入你的成绩:99
成绩非常优秀!,奖励一个肤白貌美大长腿,绝世容颜哇塞女孩
[root@localhost yunwei]# vim if5.sh
[root@localhost yunwei]# ./if5.sh 
请输入你的成绩(满分为100分):100
成绩非常优秀!,奖励一个肤白貌美大长腿,绝世容颜哇塞女孩
[root@localhost yunwei]# ./if5.sh 
请输入你的成绩(满分为100分):90
成绩非常优秀!,奖励一个肤白貌美大长腿,绝世容颜哇塞女孩
[root@localhost yunwei]# ./if5.sh 
请输入你的成绩(满分为100分):200
成绩非常优秀!,奖励一个肤白貌美大长腿,绝世容颜哇塞女孩

case条件判断结构
case从变量中取值,如果变量中的值与预设的值匹配,则执行对应的命令
#case语法结构
case $变量名 in
值1)
	执行的命令xx;;		#如果变量中的值等于值1,则执行的命令
值2)
	执行的命令yy;;		#如果变量中的值等于2,则执行的命令
...省略其他分支
*)
	执行的命令zz;;		#如果变量中的值都不是以上的值,则执行的命令
esac


[root@localhost yunwei]# vim case.sh
#!/bin/bash
read -p "请输入您喜爱的老师(仓老师|波多老师|小泽老师):" xxoo
case $xxoo in
仓老师)
        echo "又白又嫩又水润,上楼右转1号房间!";;
波多老师)
        echo "前凸后翘,波涛汹涌,上楼右转2号房间!";;
小泽老师)
        echo "肤白貌美大长腿,上楼右转3号房间!";;
*)
        echo "老师休假了";;
esac

[root@localhost yunwei]# chmod u+x case.sh 
[root@localhost yunwei]# ./case.sh 
请输入您喜爱的老师(仓老师|波多老师|小泽老师):仓老师
又白又嫩又水润,上楼右转1号房间!
[root@localhost yunwei]# ./case.sh 波多老师
请输入您喜爱的老师(仓老师|波多老师|小泽老师):波多老师
前凸后翘,波涛汹涌,上楼右转2号房间!
[root@localhost yunwei]# ./case.sh
请输入您喜爱的老师(仓老师|波多老师|小泽老师):小泽老师
肤白貌美大长腿,上楼右转3号房间!
[root@localhost yunwei]# ./case.sh
请输入您喜爱的老师(仓老师|波多老师|小泽老师):穆穆老师
老师休假了

#利用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


for循环
for循环处理,根据变量的取值,重复执行xx命令
#for循环语法结构
for 变量名 in 值1 值2  值3 值N...
do
	执行的命令
done

#编写循环创建用户脚本
[root@localhost yunwei]# 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

[root@localhost yunwei]# chmod u+x user.sh
[root@localhost yunwei]# ./user.sh 
useradd:用户“xiaofang”已存在
xiaofang 创建成功
xiaofang 密码设置成功,初始密码为“1”
xiaowei 创建成功
xiaowei 密码设置成功,初始密码为“1”
jiumei 创建成功
jiumei 密码设置成功,初始密码为“1”
alian 创建成功
alian 密码设置成功,初始密码为“1”

#测试企业的服务器联通性
#!/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   #指定超时时间

[root@localhost yunwei]# chmod u+x ping.sh
[root@localhost yunwei]# ./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

[root@localhost script]# ./ping.sh &


while循环
死循环,只要条件成立就重复执行命令
#while循环语法结构
while 条件判断
do
	执行的命令
done

#编写while循环脚本
[root@localhost yunwei]# vim while.sh
#!/bin/bash
x=1
while [ $x -le 5 ]
do
echo $x
done

[root@localhost yunwei]# chmod u+x while.sh 

#指定循环的固定次数
[root@localhost yunwei]# vim while.sh
#!/bin/bash
x=1
while [ $x -le 5 ]
do
        echo $x
        let x++
        sleep 0.1       
done

#使用while循环编写猜数字脚本
[root@localhost yunwei]# 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循环监控网卡进出口流量
[root@localhost ~]# 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地址的联通性脚本
[root@localhost yunwei]# 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
上一篇 下一篇