第四章 流程控制之条件判断
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:
[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
[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
输入其他字母
[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
补考