目录
条件测试:判断某需求是否满足,需要由测试机制来实现,专用的测试表达式需要由测试命令辅助完成。
测试过程,实现评估布尔声明,以便用在条件性环境下进行执行
格式1 test 条件表达式
格式2 [ 条件表达式 ] ? ?#注意中括号和表达式中间需要隔一个空格
?
操作符 | 作用 |
---|---|
-d | 测试是否为目录 |
-e | 测试目录或文件是否存在 |
-f | 测试 指定的对象是否为文件;指定的文件是否存在 |
-L | 测试文件是否为符号链接(软链接文件) |
-r | 测试 当前用户是否有读权限 |
-w | 测试 当前用户是否有写权限 |
-x | 测试 当前用户是否有执行权限 |
属性测试 | 作用 |
-t fd | fd 文件描述符是否在某终端已经打开 |
-s FILE | 是否存在且非空 |
-N FILE | 文件自从上一次被读取之后是否被修改过 |
-O FILE | 当前有效用户是否为文件属主 |
-G FILE | 当前有效用户是否为文件属组 |
?
格式:[ 整数1 操作符 整数2 ] 公式 ?
格式:[ "字符串1" 操作符 "字符串2" ]
? ? ?????? [ -z "字符串" ] 是否为空
????? ? ?? [ -n "字符串" ] 字符是否存在
常用的测试操作符
?
格式1:[ 表达式1 ] 操作符 [ 表达式2 ] ...
格式2:命令1 操作符 命令2 ...
常见条件
[ 表达式1 ] && [ 表达式2 ] 等同于 [ 表达式1 -a 表达式2 ] 等同于 [[ 表达式1 && 表达式2 ]]
[ 表达式1 ] || [ 表达式2 ] 等同于 [ 表达式1 -o 表达式2 ] 等同于 [[ 表达式1 || 表达式2 ]]
三元运算符
[? 表达式? ] && a || b
当条件表达式为真时,取a值;当条件表达式为假时,取b值
?
与[ 表达式 ] && 效果相同
if [ 表达式 ];then
...
fi
[root@localhost ~]# df //查询磁盘信息
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/mapper/centos-root 10475520 4616528 5858992 45% /
devtmpfs 917588 0 917588 0% /dev
tmpfs 933512 0 933512 0% /dev/shm
tmpfs 933512 17472 916040 2% /run
tmpfs 933512 0 933512 0% /sys/fs/cgroup
/dev/sda1 1038336 182388 855948 18% /boot
tmpfs 186704 4 186700 1% /run/user/42
tmpfs 186704 32 186672 1% /run/user/0
/dev/sr0 4414592 4414592 0 100% /run/media/root/CentOS 7 x86_64
[root@localhost ~]# vim test.sh
#!/bin/ bash
#磁盘使用率高于一定数值报警
USED=$(df | grep /dev/sda1 | awk '{print $5}' | awk -F '%' '{print $1}')
if [ $USED -gt 5 ] ; then
echo "警告!当前/目录的磁盘使用率为:$USED%"
fi
[root@localhost ~]# bash test.sh
警告!当前/目录的磁盘使用率为:18%
if [ 表达式 ];then
...
else
...
fi
??###########判断是否为超级管理员#######################
#!/bin/bash
if [ "$USER" != "root" ]
then
echo "非管理员用户无权限操作"
else
echo "是管理员用户"
fi
if [ 表达式 ];then
...
elif [ 表达式 ];then
...
elif [ 表达式 ];then
...
[else]
fi
#!/bin/bash
read -p "请输入你的考试分数:" grade
if [ $grade -ge 85 ]&& [ $grade -le 100 ]
then
echo "你的成绩为$grade"
echo "你的成绩为优秀"
elif [ $grade -ge 70 ]&&[ $grade -le 84 ]
then
echo "你的成绩为$grade"
echo "你的成绩为良好"
elif
[ $grade -ge 60 ]&&[ $grade -le 69 ]
then
echo "你的成绩为$grade"
echo "你的成绩为合格"
else
echo "你的成绩为$grade"
echo "你的成绩不合格"
fi
case支持glob风格的通配符:
case 变量 in
模式1)
....
;;
模式2)
....
;;
*)
....
;;
esca
[root@localhost ~]# vim shuru.sh
#!/bin/bash
#输入yes或no中任意一个或多个字母的大小写都能识别为yes或n0
read -p "请输入yes/no: " key
case $key in
[nN]|[nN][oO])
echo "你输入的是no"
;;
[Yy]|[Yy][eE][Ss])
echo "你输入的是yes"
;;
*)
echo "你输入错误不是yes/no"
;;
esac
[root@localhost ~]# bash shuru.sh
请输入yes/no: y
你输入的是yes
[root@localhost ~]# bash shuru.sh
请输入yes/no: no
你输入的是no
[root@localhost ~]# bash shuru.sh
请输入yes/no: ni
shuru.sh:行11: echo你输入错误不是yes/no: 没有那个文件或目录
[root@localhost ~]# bash shuru.sh
请输入yes/no: mm
你输入错误不是yes/no
?