条件测试语句
文件测试
test 操作符 表达式
- -d测试文件是否为目录文件(Directory)
- -f测试文件是否为普通文件(File)
- -e测试目录或文件是否存在(Exist)。建议使用-e,-a可能不准确。
- -a测试目录或文件是否存在(Exist)
- -r测试当前用户是否有权限读取(Read)
- -w测试当前用户是否有权限写入(Write)
- -x测试当前用户是否有权限执行(eXcute)
- -L测试是否为符号链接(软链接文件)
[root@localhost ~]# test -d /etc
[root@localhost ~]# echo $?
0
[root@localhost ~]# test -f /etc/sysconfig/
[root@localhost ~]# echo $?
1
整数测试
格式[数值1 符号 数值2 ]
| 符号 | 意义 |
|---|---|
| -eq | 等于(Equal) |
| -ne | 不等于(Not Equal) |
| -gt | 大于(Greater Than) |
| -lt | 小于(Lesser Than) |
| -le | 小于或等于(Lesser or Equal) |
| -ge | 大于或等于(Greater or Equal) |
字符串测试
常用的测试操作符
- =:字符串内容相同
- !=:字符串内容不同,! 号表示相反的意思
- -z:字符串内容为空
- -n:字符是否存在
[root@localhost ~]# st1=aa
[root@localhost ~]# st2=bb
[root@localhost ~]# [ $st1 = $st2 ];echo $?
1
[root@localhost ~]# [ $USER = root ];echo $?
0
[root@localhost ~]# [ $USER != root ];echo $?
1
逻辑测试
逻辑测试两种格式:
#例:[表达式1] && [表达式2] 等同于 [表达式1 -a 表达式2] 等同于 [[表达式1 && 表达式2]]
#例:[表达式1] || [表达式2] 等同于 [表达式1 -o 表达式2] 等同于 [[表达式1 || 表达式2]]
CMD1 && CMD2 全真才为真,一假即为假。
CMD1 || CMD2 一真即为真
if 单分支结构
if 判断条件
then 条件成立的分支代码
fi
if 双分支结构
if 判断条件
then 条件成立的分支代码
else 条件不成立的分支代码
fi
netstat -ntap | grep :80 &> /dev/null
if [ $? -eq 0 ]
then
echo "网站服务已在运行"
else
if rpm -q httpd &> /dev/null
then
echo "正在启动httpd服务"
systemctl start httpd
else
echo "正在安装并启动httpd服务"
yum install httpd -y &> /dev/null
systemctl start httpd &> /dev/null
fi
fi
if 多分支结构
if 判断条件1
then 条件1为真的分支代码
elif 判断条件2 then 条件2为真的分支代码
elif 判断条件3 then 条件3为真的分支代码
...
else 以上条件都为假的分支代码
fi
h=$(date +%H)
if [ $h -ge 6 -a $h -le 10 ]
then
echo "早上好"
elif [ $h -ge 11 -a $h -le 13 ]
then
echo "中午好"
elif [ $h -ge 14 -a $h -le 18 ]
then
echo "下午好"
elif [ $h -ge 19 -a $h -le 22 ]
then
echo "晚上好"
else
echo "休息时间"
fi
case语句
case 变量引用 in
模式1)
命令分支1
;;
模式2)
命令分支2
;;
...
*)
默认命令分支
esac
read -p "请输入你的分数(0-100):" grade
case $grade in
100)
echo "你很优秀"
;;
[89][0-9])
echo "你表现良好"
;;
[67][0-9])
echo "你及格了"
;;
[0-9]|[1-5][0-9])
echo "你不及格"
;;
*)
echo "输入有误,请重新输入0-100"
bash $0
esac