目录
一.条件测试:
1.条件测试的基本概念:
2.文件测试:
编辑3.整数数值比较:
4.字符串比较:
5.逻辑测试(短路运算):
二.if语句:
1.单分支:
编辑
2.双分支 :
3.多分支语句:
三.case语句:
一.条件测试:
1.条件测试的基本概念:
条件测试:判断某需求是否满足,需要由测试机制来实现,专用的测试表达式需要由测试命令辅助完成。
测试过程,实现评估布尔声明,以便用在条件性环境下进行执行
- 若真,则状态码变量 $? 返回0
- 若假,则状态码变量 $? 返回1
2.文件测试:
格式1 test 条件表达式
格式2 [ 条件表达式 ] #注意中括号和表达式中间需要隔一个空格
操作符 | 作用 |
---|---|
-d | 测试是否为目录 |
-e | 测试目录或文件是否存在 |
-f | 测试 指定的对象是否为文件;指定的文件是否存在 |
-L | 测试文件是否为符号链接(软链接文件) |
-r | 测试 当前用户是否有读权限 |
-w | 测试 当前用户是否有写权限 |
-x | 测试 当前用户是否有执行权限 |
属性测试 | 作用 |
-t fd | fd 文件描述符是否在某终端已经打开 |
-s FILE | 是否存在且非空 |
-N FILE | 文件自从上一次被读取之后是否被修改过 |
-O FILE | 当前有效用户是否为文件属主 |
-G FILE | 当前有效用户是否为文件属组 |
- test [操作符选项] 条件表达式
- [ [操作符] 条件表达式 ]
3.整数数值比较:
格式:[ 整数1 操作符 整数2 ] 公式
- -eq:等于(Equal)
- -ne:不等于(Not Equal)
- -gt:数大于(Greater Than)
- -lt:小于(Lesser Than)
- -le:小于或等于(Lesser or Equal)
- -ge:大于或等于(Greater or Equal
4.字符串比较:
格式:[ "字符串1" 操作符 "字符串2" ]
[ -z "字符串" ] 是否为空
[ -n "字符串" ] 字符是否存在
常用的测试操作符
- =:字符串内容相同
- !=:字符串内容不同,! 号表示相反的意思
- -z:字符串内容为空
- -n: 字符是否存在
5.逻辑测试(短路运算):
格式1:[ 表达式1 ] 操作符 [ 表达式2 ] ...
格式2:命令1 操作符 命令2 ...
常见条件
- -a或&&:逻辑与,“而且”的意思全真才为真
- -o或||:逻辑或,“或者”的意思一真即为真
- !:逻辑否
[ 表达式1 ] && [ 表达式2 ] 等同于 [ 表达式1 -a 表达式2 ] 等同于 [[ 表达式1 && 表达式2 ]] [ 表达式1 ] || [ 表达式2 ] 等同于 [ 表达式1 -o 表达式2 ] 等同于 [[ 表达式1 || 表达式2 ]]
三元运算符
[ 表达式 ] && a || b
当条件表达式为真时,取a值;当条件表达式为假时,取b值
二.if语句:
1.单分支:
与[ 表达式 ] && 效果相同
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%
2.双分支 :
if [ 表达式 ];then...else...fi
###########判断是否为超级管理员#######################
#!/bin/bash
if [ "$USER" != "root" ]
thenecho "非管理员用户无权限操作"
else
echo "是管理员用户"
fi
3.多分支语句:
if [ 表达式 ];then...
elif [ 表达式 ];then...
elif [ 表达式 ];then...
[else]fi
#!/bin/bash
read -p "请输入你的考试分数:" gradeif [ $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语句:
case支持glob风格的通配符:
- * 任意长度任意字符
- ? 任意单个字符
- [0-9] 指定范围内的任意单个字符
- | 或者,如: a|b
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