目录
2.1. if语句语法
2.1.1. 单分支结构
# 语法1:
if <条件表达式>
then
指令
fi
#语法2:
if <条件表达式>;then
指令
fi
2.1.2. 双分支结构
if <条件表达式>
then
指令序列1
else
指令序列2
fi
2.1.3. 多分支结构
if 条件表达式1
then
指令序列1
elif 条件表达式2
then
指令序列2
else
指令序列n
fi
2.2. 案例
例1:编写脚本choice1.sh,利用单分支结构实现输入2个整数,输出最大值
#!/bin/bash
#输入两个整数,输出最大值
read -p "请输入第一个整数:" x
read -p "请输入第二个整数:" y
#
#max=$x
#
#if (($max<y))
#then
# max=$y
#fi
#
#echo "最大值为:$max"
if (($x>$y))
then
max=$x
else
max=$y
fi
例2:面试题,编写脚本choice2.sh,判断系统内存剩余容量大小,若低于100M则发送消息进行告警
#!/bin/nash
#编写脚本,判断系统容量大小,若低于100m则发送消息报错
free_mem=$(free -m | grep Mem | tr -s " " | cut -d " " -f4)
if (($free_mem<100))
then
echo "警告,剩余内存空间为:$free_mem MB,低于警戒值"
else
echo "剩余内存:$free_mem MB,空间容量足够。"
fi
例3:编写脚本choice3.sh,判断当前脚本的执行者,若不是root账户则提示,并退出
# 检查当前账户的4种方法
[root@server ~]# whoami
root
[root@server ~]# id -u
0
[root@server ~]# echo $USER
root
[root@server ~]# echo $UID
0
#!/bin/bash
#判断当前脚本的执行者,若不是root账户则退出
if [ "$USER"!="root" ]
then
echo "please switch user root"
exit
fi
例4:编写脚本choice4.sh,实现闰年的判断
#!/bin/bash
#判断闰年
#算法:能被4整除,但不能被100整除或者能被400整除
read -p "请输入四位数整数的年份:" year
if ((year%4==0)) && ((year%100!=0)) || ((year%400==0))
then
echo "闰年"
else
echo "平年"
fi
例5:编写脚本choice5.sh,判断sshd是否运行
统计某个服务是否运行的方法
1.ps -ef | grep sshd | grep -v grep | wc -l
2.netstat -lntup | grep 22 | wc -l
#!/bin/bash
#检测sshd服务是否运行
num=$( ps -ef | grep sshd | grep -v grep | wc -l)
if (($num>0))
then
echo "sshd is running!"
else
echo "sshd is not running"
fi
例6:面试题,编写脚本choice6.sh,判断主机是否存活
#!/bin/bash
#判断主机是否存活
read -p "请输入测试主机的IP地址:" ip
ping -c 2 -w 3 $ip &> /dev/null
if [ $? -eq 0 ]
then
echo "主机$ip已运行"
else
echo "主机$ip 未运行"
fi
拓展
#!/bin/bash
#判断主机是否存活
for ip in 192.168.223.{125..135}
do
ping -c 2 -w 3 $ip &> /dev/null
if [ $? -eq 0 ]
then
echo -e "\e[1;31m主机$ip 已运行\e[0m"
else
echo "主机$ip 未运行"
fi
done
例9:编写脚本choice9.sh,判断当前主机cpu生产商
#!/bin/bash
vendor=$(grep vendor_id /proc/cpuinfo | uniq | cut -d ":" -f2 )
if [ $vendor == GenuineIntel ]
then
echo "Intel"
elif [ $vendor == AuthenticAMD ]
then
echo "AMD"
else
echo "other"
fi
2.3. case多条件判断
2.3.1. 格式
case 变量名 in
值1)
指令1
;;
值2)
指令2
;;
值3)
指令3
;;
*)
默认
esac
2.3.2. 执行过程
case语句会将该变量的值与 )括号中的值相比较,如果与某个值相等,则执行对应语句。
当遇到“;;”符号时,就跳出case语句,执行esac语句后面的语句。
如果没有与任何一个值相匹配,则执行*)后面的一组语句
2.3.3. 示例
例10:编写脚本choice10.sh,对上例7的百分制成绩判断等级成绩进行改写
#! /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