条件测试
条件测试:
设定一个条件,判断设定是否满足,执行一段特定代码,不满足,也可以执行不满足的代码
$?的返回码来判断条件为真还是为假(true或false)
条件测试的格式
格式一:
test表达式:
命令 | 含义 |
---|---|
-e | 判断文件(目录)是否存在 |
-d | 判断目录是否存在 |
-f | 判断文件是否存在 |
-r | 判断当前用户是否有读权限 |
-w | 判断当前用户是否有写权限 |
-x | 判断当前用户是否有执行权限 |
整数比较:
命令 | 含义 | 符号 | 含义 |
---|---|---|---|
-eq | 等于 | == | 比较字符和数字 |
-ne | 不等于 | != | 比较数字和字符串 |
-gt | 大于 | > | 大于 |
-lt | 小于 | < | 小于 |
-ge | 大于等于 | >= | 大于等于 |
-le | 小于等于 | <= | 小于等于 |
仅限于整数比较
格式二:[ ] 、 [ [ ] ]bash自带的
中括号两边都要有空格
字符串只能比较是否一致,不能比较大小
逻辑测试
逻辑测试:且 或
且:表达式中的所有条件都必须成立才能使且
或:只要表达式中有一个条件成立即可
符号:
且:-a 、 &&
或:-o 、 ||
[[]]和[]:双中括号的功能更强大,适用于复杂的表达式,[]功能比较适用于简单的条件判断,[[]]可以避免歧义
if判断语句
单分支语句
换行写法:
if [条件判断]
then
运行代码
fi
单行写法:if [条件判断]; then 运行的代码; fi
练习
输入一个数字,如果比5大,就回显“ok”
#!/bin/bash
read -p "请输入一个数字:" a
if [ "$a" -gt 5 ]
then
echo "ok"
fi
多分支语句
双分支
if [条件判断]
then(条件满足)
代码
else(条件不满足)
代码
fi
/dev/null这是系统的一个黑洞文件,把不需要的信息丢入到这个当中
练习
输入一个数字,如果数字是偶数,则回显偶数,如果是奇数,则回显奇数
#!/bin/bash
read -p "请输入一个数字" a
if [ "$a"%2 -eq 0 ]
then
echo "${a}是偶数"
else
echo "${a}是奇数"
fi
多分支语句
if [条件判断]
then
代码
elif [条件]
then
代码
elif [条件]
then
代码
else
代码
fi
练习
输入一个考试成绩,85-100分优秀,60-84分一般,60分以下,抄30遍
#!/bin/bash
read -p "请输入一个考试成绩:" a
if [ $a -ge 85 -a $a -le 100 ]
then
echo "你的成绩为优秀"
elif [ $a -ge 60 -a $a -le 84 ]
then
echo "你的成绩为一般"
else
echo "抄30遍"
fi
if嵌套语句
if [条件1]
then
if [条件2]
then
echo 代码
else
echo 代码
fi
else
echo 代码
fi
if嵌套,只有大的条件满足,才会执行小的条件
练习
输入一个考试成绩,85-100分优秀,60-84分一般,60分以下,抄30遍,成绩为整数,且在0-100之内
#!/bin/bash
read -p "请输入一个考试成绩:" a
if [ "$a" -eq "$a" ] && [[ "$a" -ge 0 && "$a" -le 100 ]]
then
if [ $a -ge 85 -a $a -le 100 ]
then
echo "你的成绩为优秀"
elif [ $a -ge 60 -a $a -le 84 ]
then
echo "你的成绩为一般"
else
echo "抄30遍"
fi
else
echo "输入不正确"
fi 2> /dev/null
case语句
case语句:也是条件判断的一种,是多条件判断的另一种写法
以模式来进行匹配:
case 变量值 in
模块1)
代码
;;
模块2)
代码
;;
*)
代码
esac
练习
输入一个考试成绩,85-100分优秀,60-84分一般,60分以下,抄30遍
#!/bin/bash
read -p "请输入一个考试成绩:" num
[[ "$num" -ge 85 && "$num" -le 100 ]] && num="a"
[[ "$num" -ge 60 && "$num" -le 84 ]] && num="b"
case $num in
a)
echo "你的成绩为优秀"
;;
b)
echo "你的成绩为一般"
;;
*)
echo "抄30遍"
esac
作业
1、检查用户家目录中的 test.sh 文件是否存在,并且检查是否有执行权限
#!/bin/bash
[ -e /home/test.sh ]
if [ $? -eq 0 ]
then
[ -x /home/test.sh ]
if [ $? -eq 0 ]
then
echo "test.sh文件具备执行权限"
else
echo "test.sh文件存在,但是不具备执行权限"
fi
else
echo "test.sh文件不存在"
fi
2.提示用户输入100米赛跑的秒数,要求判断秒数大于0且小于等于10秒的进入选拔赛,
大于10秒的都淘汰,
如果输入其它字符则提示重新输入;进入选拔赛的成员再进一步判断男女性别。
男生进男生组,女生进女生组,如果输入错误请提示错误
#!/bin/bash
read -p "请输入百米赛跑的用时:" time
if [[ "$time" -eq "$time" && "$time" -gt 0 && "$time" -le 10 ]]
then
read -p "请输入性别[boy\gril]:" age
if [ "$age" == boy ]
then
echo "进入男生组"
echo "${time} ${age}" >> boy.txt
elif [ "$gae" == gril ]
then
echo "进入女生组"
echo "${time} ${age}" >> gril.txt
else
echo "输入错误"
fi
elif [ "$time" -gt 10 ]
then
echo "你被淘汰了"
else
echo "输入错误,请重新输入"
fi 2> /dev/null
~
3.用case语句解压根据后缀名为 .tar.gz 或 .tar.bz2 的压缩包到 /opt 目录
#!/bin/bash
read -p "请输入压缩包名称:" name
case $name in
*.tar.gz)
tar -zxvf "$name" -C /opt/ &> /dev/null
;;
*.tar.bz2)
tar -jxvf "$name" -C /opt/ &> /dev/null
;;
*)
echo "输入错误,你输入的不是压缩包"
esac
4.提示用户输入内容,使用if 语句判断输入的内容是否为整数。判断范围0-100。判断输入的内容是奇数还是偶数。
#!/bin/bash
read -p "请输入一个整数数字(1-100):" num
if [ "$num" -eq "$num" ] &> /dev/null && [[ "$num" -ge 0 && "$num" -le 100 ]] &> /dev/null
then
if [ "$num%2" -eq 0 ]
then
echo "${num}是偶数"
else
echo "${num}是奇数"
fi
else
echo "输入错误"
fi
5、用if 语句判断主机是否存活.保存到/opt/hosts.txt
ping -c 5 不显示ping的过程
#!/bin/bash
read -p "请输入主机ip地址:" ip
ping -c 5 $ip &>> /dev/null
if [ $? -eq 0 ]
then
echo "主机存活"
echo "${ip}" >>/opt/hosts.txt
else
echo "主机不存活"
fi
6、用case语句控制 firewalld start|stop|restart|status 来管理nginx服务,
要求如果命令选项不对,则提示输入不正确: {start|stop|status|restart}”。
#!/bin/bash
apt -y install nginx
read -p "请输入下列选项:(start、stop、restart、status)" score
case $score in
start)
systemctl "$score" nginx
;;
stop)
systemctl "$score" nginx
;;
restart)
systemctl "$score" nginx
;;
status)
systemctl "$score" nginx
;;
*)
echo "输入不正确:{start|stop|restart|status}"
esac