条件测试
if语句
单分支
双分支
多分支
case语句
实例
1.检查用户家目录中的 test.sh 文件是否存在,并且检查是否有执行权限
if [ -e ~/test.sh ]
then
echo "存在test.sh"
if [ -x ~/test.sh ]
then echo "test.sh可执行"
else echo "test.sh无执行权限"
fi
else echo "不存在test.sh"
fi
2.提示用户输入100米赛跑的秒数,要求判断秒数大于0且小于等于10秒的进入选拔赛,大于10秒的都淘汰,
如果输入其它字符则提示重新输入;进入选拔赛的成员再进一步判断男女性别,男生进男生组,女生进女生组,如果输入错误请提示错误
read -p 'input second' second
if [ $second -eq $second ] &>/dev/null
#用-eq排除非数字,由于输入非数字会输出错误报告,重定向到null设备
then
if [ $second -gt 0 ] && [ $second -le 10 ] #大于0s小于等于10s
then read -p 'input sexual(男女)' sexual
if [ $sexual == "男" ]
then echo "$second 晋级男组"
elif [ $sexual == "女" ]
then echo "$second 晋级女组"
else echo "性别错误"
fi
else echo "出局 $second"
fi
else echo "输入数字!"
fi
3.用case语句解压根据后缀名为 .tar.gz 或 .tar.bz2 的压缩包到 /opt 目录
for name in *.tar.*
do
[[ $name == *.tar.gz ]] && a='gz'
[[ $name == *.tar.bz2 ]] && a='bz2'
case $a in
gz)
tar -xzvf $name -C /opt
;;
bz2)
tar -xjvf $name -C /opt
;;
*)
echo "bad"
esac
done
echo "complete"
read -p "请输入你要解压的文件:" file
case $file in ky28.tar.gz
*.tar.bz2)
echo "正在解压bz2文件至opt目录中....."
tar -jxvf $file -C /opt
;;
*.tar.gz)
echo "正在解压gz文件至opt目录中....."
tar -zxvf $file -C /opt
;;
*)
echo "文件格式有误,请重新输入文件"
esac
4.提示用户输入内容,使用if 语句判断输入的内容是否为整数。
read -p "input number" num
if [ $num -eq $num ] &>/dev/null
then
echo "整数"
else
echo "不是整数"
fi
5.根据上一题再判断输入的内容是奇数还是偶数。
read -p "input number" num
if [ $num -eq $num ] &>/dev/null
then
echo '整数'
if [ $(($num%2)) == 0 ]
then echo "偶数"
else echo "奇数"
fi
else
echo "不是整数"
fi
6.用if 语句判断主机是否存活
ping -c 5
[root@xue xue]# cat ping.sh
ping -c 5 192.168.80.101
if [ $? == 0 ]
then echo '存活'
else echo '不存活'
fi
ping -c 5 192.168.80.250
if [ $? == 0 ]
then echo '存活'
else echo '不存活'
fi
7.用case语句在/etc/init.d/目录中写一个firewalld脚本,并加入到系统服务管理中
使能够使用 service firewalld start|stop|restart|status 来管理firewalld服务,
要求如果命令选项不对,则提示 “用法: $0 {start|stop|status|restart}”。
read -p "输入start stop status restart以操作防火墙" choose
case $choose in
start)
service firewalld start
;;
stop)
service firewalld stop
;;
status)
service firewalld status
;;
restart)
service firewalld restart
;;
*)
echo "用法: $0 {start|stop|status|restart}"
esac