shell条件测试及If选择结构

条件测试

1. 条件测试

作用: 赋予脚本智能判断的效果
文件或者目录的读/写等状态
数值的大小
字符串是否匹配
多条件组合

语法格式

test 选项 参数 或者 [ 选项 参数 ]

常见的测试操作

1. 对字符串进行测试
a=abc
b=xyz
字符串比较

== 两边是否相等,相等时条件测试算成功

[ $a == $b ]  //使用变量判断两个变量的值是否相等

!= 两边是否不等,不相等时条件测试算成功

[ $a != $b ]   //使用变量判断两个变量的值是否不相等

-z 判断变量是否为空

[ -z $a ]  //判断变量是否为空,为空时条件测试算成功

! -z 判断变量是否非空

[ ! -z $a ]  //判断变量是否非空,非空时条件测试算成功
整数值比较

格式: [ 字符串1 操作符 字符串2 ]
整数值比较
实例: 检查已经登陆的用户数,是否不超过5个

[root@localhost ~]# who | wc -l
2
[root@localhost ~]#[ $(who | wc -l) -le 5 ] && echo "YES"
YES
2. 文件状态测试

格式:[ 操作符 文件或目录 ]

文件状态测试
相关测试

[ -e abc ]   //判断当前目录下的abc是否存在,用echo $?查结果
[ -f /opt/abc ]   //判断opt下有没有abc这个普通文件
[ -d /opt/abc ]  //判断opt下有没有abc这个目录
mkdir  xyz
[ -d /opt/xyz ]   //判断opt下有没有xyz这个目录
[ -r /opt/abc ]   //判断当前用户对abc是否有读权限
[ -w /opt/abc ]   //判断当前用户对abc是否有写权限
[ -x /opt/abc ]   //判断当前用户对abc是否有x权限
3. 组合多个条件

格式: 命令1 操作符 命令2 ... 或者 [ 条件1 ] 操作符 [ 条件2 ] ...
组合多个条件
实例1: 当前用户为root,且位于/root目录下

[root@localhost ~]# [ $USER == "root" ] && [ $PWD == "root" ]
[root@localhost ~]# [ $? -eq 0 ] && echo YES
YES

实例2: 当/opt/testdir目录不存在时,创建该目录

[root@localhost ~]# [ -d "/opt/testdir"] || madir -p /opt/testdir
[root@localhost ~]# ls -ld /opt/testdir/
drwxr-xr-x 2 root root 4096 09-20 12:56 /opt/testdir

If选择结构

单分支结构

特点: 当条件成立时执行命令序列,反之不执行

格式

单分支结构

案例

需求
判断挂载点目录/mnt/dvd是否存在,若不存在则创建
代码实现

#! /bin/bash
mount_dir=/mnt/dvd
if [ !-d $mount_dir ]
then
	mkdir -p $mount_dir
fi

双分支结构

特点: 当条件成立时执行命令序列1,否则执行命令序列2

格式

双分支结构

案例

需求

  1. 检测并判断指定的主机是否可以ping通
  2. 目标主机的地址以位置参数提供
    代码实现
#! /bin/bash
ping -c 3 -i 0.2 -W 3 $1 &> /dev/null
if [ $? -eq 0 ]; then
	echo "Host $1 is up"
else
	echo "Host $1 is down"
fi

多分支结构

特点: 相当于if语句嵌套,针对多个条件分别执行不同的操作

格式

多分支结构

案例

需求

  1. 输入一个分数, 判断成绩分档
  2. 85~100 优秀, 70~84 良好,低于70分不及格
    代码实现
#! /bin/bash
read -p "请输入分数(0-100):"FS
if [ $FS -ge 85 ] && [ $FS -le 100 ];then
	echo "$FS分!优秀"
elif [ $FS -ge 70 ] && [ $FS -le 84 ];then
	echo "$FS分!合格"
else
	echo "$FS分!不合格"
fi
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郭不戳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值