第四章 流程控制之条件判断 (RHCE)

第四章 流程控制之条件判断

1.1 if语句语法

1.1.1单分支结构

#语法1:
if <条件表达式>
then
    指令
fi

#语法2:
if <条件表达式>;then
    指令
fi

1.1.2 双分支结构

if <条件表达式>
then
    指令序列1
else 
    指令序列2
fi

1.1.3 多分支结构

if 条件表达式1
then
    指令序列1
elif  条件表达式2
then
    指令序列2
else
指令序列n
fi

1.2 案例

  • 例1:编写脚本choice1.sh ,输入2个数,输出最大值
[root@server ~]# vim choice1.sh

#!/bin/bash

read -p "请输入第一个整数:" x
read -p "请输入第二个整数:" y

max=$x

if [[ $max < $y ]];then
        max=$y
fi      
echo "最大值:" $max

[root@server ~]# bash choice1.sh
请输入第一个整数:5
请输入第二个整数:3
最大值: 5
[root@server ~]# bash choice1.sh
请输入第一个整数:7
请输入第二个整数:3
最大值: 7
  • 例2:面试题,编写脚本choice2.sh,判断当前系统剩余空间大小,如果低于100M则发送消息
[root@server ~]# vim choice2.sh

#!/bin/bash

free_mem=$(free -m | grep Mem | tr -s " " | cut -d " " -f4)

#free -m 显示内存信息,单位MB
#grep "Mem" 以"Mem"为条件进行过滤
#tr -s " " : 将多个空格压缩为1个空格
# cut -d " " -f4  :以空格为分隔符,取出第4列

if (($free_mem > 100))
then
        echo "剩余内存:" $free_mem
else
        echo "内存小于100,内存不足"
fi
[root@server ~]# bash choice2.sh
剩余内存: 489
  • 例3:编写脚本choice3.sh ,判断当前脚本执行者,如果不是root账户则提示需要root账户来执行,并退出
#判断当前脚本执行者方法:
[root@server ~]# whoami 
root
[root@server ~]# id -u
0
[root@server ~]# echo $USER
root
[root@server ~]# echo $UID
0
[root@server ~]# 


[root@server ~]# vim choice3.sh
#!/bin/bash

if (( $USER!="root"))
then
        echo "请使用root账户登录"
fi

[root@server ~]# chmod a+rx choice3.sh
[root@server ~]# bash choice3.sh
[root@server ~]# su zhangsan
[zhangsan@server root]$ bash choice3.sh
bash: choice3.sh: Permission denied
[zhangsan@server root]$ su root
Password: 
  • 例4:编写脚本choice4.sh ,实现闰年
[root@server ~]# vim choice4.sh

#!/bin.bash

read -p "请输入4位数年份数字" year

if  [ $(($year%4))  -eq 0 ] && [ $(($year%100))  -eq 0 ] || [ $(($year%400)) -eq 0 ]
then    
        echo "$year 是闰年"
else
        echo "$year 是平年"
fi      
~ 
[root@server ~]# bash choice4.sh
请输入4位数年份数字2000
2000 是闰年
[root@server ~]# bash choice4.sh
请输入4位数年份数字2017

2017 是平年
  • 例5:编写脚本choice5.sh ,判断sshd是否运行的方法
#判断sshd是否运行的方法
法1:根据数据进程
[root@server ~]# ss -lntup | grep 22 | wc -l

[root@server ~]# netstat -lntup | grep 22 | wc -l
法2:根据端口号
[root@server ~]# ps -ef | grep sshd | grep -v grep | wc -l

[root@server ~]# vim choice5.sh

#!/bin/bash
num = $(ps -ef | grep sshd | grep -v grep | wc -l)
if [ $num -ge 1 ]
then
        echo "sshd正在运行"
else
        echo "sshd没有运行"
fi
[root@server ~]# bash choice5.sh
  • 例6:面试题,编写脚本choice6.sh ,判断主机是否存活
    [root@server ~]# vim choice6.sh
    
    #!/nin/bash
    
    for ip in 192.168.145.{125..130}
    do
    
            ping -c 2 -w 3 $ip &> /dev/null
            num=$?
            if [ $num -eq 0 ]
            then    
                    echo "$ip yes"
            else    
                    echo "$ip no"
            fi      
    done    
    [root@server ~]# bash choice6.sh
    192.168.145.125 no
    192.168.145.126 no
    192.168.145.127  yes
    192.168.145.128  yes
    192.168.145.129 no
    192.168.145.130 no
    
    
[root@server ~]# vim choice6.sh

#!/nin/bash

read -p "请输入IP地址:" x

ping -c 2 -w 3 $x &> /dev/null
if [ $? -eq 0 ]
then    
        echo "主机$x运行"
else    
        echo "no"
fi   

[root@server ~]# bash choice6.sh
请输入IP地址:192.168.145.127
主机192.168.145.127运行
[root@server ~]# bash choice6.sh
请输入IP地址:192.168.145.130
no
   
  •  例7:编写脚本choice7.sh ,输入百分制成绩,输出等级成绩
[root@server ~]# vim choice7.sh
#!/bin/bash

read -p "请输入百分制成绩:" score

if [ -z $score ]
then
        echo "未输入成绩,请输入成绩!"
elif [ $score -lt 0 -o $score -gt 100 ]
then
        echo "成绩有误,请输入0-100间成绩"
elif [ $score -ge 90 ]
then
        echo "成绩优秀"
elif [ $score -ge 80 ]
then
        echo "成绩良好"
elif [ $score -ge 60 ]
then
        echo "成绩及格"
else
        echo "补考"
fi

[root@server ~]# bash choice7.sh
请输入百分制成绩:
未输入成绩,请输入成绩!
[root@server ~]# bash choice7.sh
请输入百分制成绩:70
成绩及格
[root@server ~]# bash choice7.sh
请输入百分制成绩:80
成绩良好
[root@server ~]# bash choice7.sh
请输入百分制成绩:98
成绩优秀
  • 例8: 编写脚本choice8.sh ,根据用户输入的内容,判断数字、字母、其他字符
#!/bin/bash
[root@server ~]# vim choice8.sh

read -p "请输入内容:" str

if echo $str | grep [a-zA-Z] > /dev/null
then
        echo "输入是字母"
elif echo $str | grep [0-9] > /dev/null
then
        echo "输入数字"
else
        echo "输入其他字符"
fi

[root@server ~]# bash choice8.sh
请输入内容:45
输入数字
[root@server ~]# bash choice8.sh
请输入内容:  
输入其他字符
[root@server ~]# bash choice8.sh
请输入内容:aaa
输入其他字母
  • 例9:编写脚本choice9.sh,判断当前主机
[root@server ~]# vim choice9.sh

#!/bin/bash

vendor=$( grep "vebdor_id" /proc/cpuinfo | uniq | awk -F : '{print $NF}')

if [[ $vendor =~ [[:space:]]*GenuineIntel$ ]]
then
        echo "Inter"
elif  [[ $vendor =~ [[:space:]*AuthenticAMD$ ]]
then
        echo "AMD"
else
        echo "其他"
fi
[root@server ~]# bash choice9.sh
其他

1.3case多条件判断

1.3.1 格式

case 变量名 in
    值1)
        指令1
        ;;
     值2)
        指令2
        ;;
     值3)
        指令3
        ;;
     *)
        默认
esac

1.3.2 执行过程

  • case语句会将该变量的值与) 括号中的值相比较,如果与某个值相等,则执行对应语句。
  • 当遇到";;"符号时,就跳出语句,执行case语句后面的语句
  • 如果没有与任何一个值相匹配,则执行*)后面的一组语句

1.3.3 示例

  • 例10:编写脚本choice10.sh ,输入百分制成绩,输出等级成绩
[root@server ~]# vim choice7.sh

#!/bin/bash

read -p "请输入百分制成绩:" score
case $score in
        9[0-9]|100)
                 echo "成绩优秀"
        ;;
        8[0-9])
                echo "成绩良好"
        ;;
        6[0-9]|7[0-9])
                echo "成绩及格"
        ;;
        *)
                echo "补考"
esac

[root@server ~]# bash choice7.sh
请输入百分制成绩:80
成绩良好
[root@server ~]# bash choice7.sh
请输入百分制成绩:90
成绩优秀
[root@server ~]# bash choice7.sh
请输入百分制成绩:45
补考

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值