我们下来看一些shell特有的:
按照文件类型来判断
-d 文件 判断该文件是否存在,并且是否是目录
-e 文件 判断该文件是否存在
-f 文件 判断该文件是否存在,并且是否为普通文件
# 查看该文件是否存在
[ -e /root/install.log ]
# 查看上一条命令执行是否成功
echo $?
# 或者,当-e命令正确执行,就不会执行yes, 当yes不执行,就会执行no
[ -e /root/install.log ] && echo yes || echo no
两个文件之间进行比较
文件1 -nt文件2 判断文件1的修改时间是否比文件2的新
文件1 -ot文件2 判断文件1的修改时间是否比文件2的旧
文件1 -ef文件2 判断这两个文件是否为同一个文件,用于判断硬链接
两个整数之间判断
整数1 -eq 整数2 判断整数1是否和整数2相等
整数1 -ne 整数2 判断整数1是否和整数2不相等
整数1 -gt 整数2 判断整数1是否大于整数2
整数1 -lt 整数2 判断整数1是否小于整数2
整数1 -ge 整数2 判断整数1是否大于等于整数2
整数1 -le 整数2 判断整数1是否小于等于整数2
字符串的判断
-z 字符串 ---- 判断字符串是否为空
-n 字符串 ---- 判断字符串是否为非空
字符串1 == 字符串2 ---- 判断字符串1是否和字符串2相等
字符串1 != 字符串2 ---- 判断字符串是否和字符串2不相等
多重条件判断
判断1 -a 判断2 逻辑与,判断1和判断2都成立,为真
判断1 -o 判断2 逻辑或,判断1和判断2都成立,最终的结果就为真
!判断 取反,使原先的判断取反
接下来看一下if条件语句
语法:
if [ 条件判断式1 ]
then
当条件判断式1成立时,执行程序1
elif [ 条件判断式2 ]
当条件判断式2成立时,执行程序2
else
当所有条件不成立,执行的程序
fi
来看几个例子
判断登录的用户是否为root
[root@localhost ~]# env | grep USER
USER=root
[root@localhost ~]# env | grep USER | cut -d "=" -f2
root
# env查看环境变量,grep提取出user的那一行, cut命令将结果从"="开始分割,只提取第二部分
shell脚本
#!/bin/bash
test=$(env | grep USER | cut -d "=" -f2)
if [ "$test" == "root" ]
then
echo "root root root!"
else
echo "no no no!"
fi
查看根分区占用情况
# df -h查看分区占用情况,grep提取出"/"根分区信息, awk提取出第5列的信息, cut将结果通过%分割, 取第一部分
[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda3 10G 1.6G 8.5G 16% /
devtmpfs 477M 0 477M 0% /dev
tmpfs 488M 0 488M 0% /dev/shm
tmpfs 488M 7.7M 480M 2% /run
tmpfs 488M 0 488M 0% /sys/fs/cgroup
/dev/sda1 197M 102M 96M 52% /boot
tmpfs 98M 0 98M 0% /run/user/0
[root@localhost ~]# df -h | grep sda3
/dev/sda3 10G 1.6G 8.5G 16% /
[root@localhost ~]# df -h | grep sda3 | awk '{print $5}'
16%
[root@localhost ~]# df -h | grep sda3 | awk '{print $5}' | cut -d "%" -f1
16
编写shell脚本
#!/bin/bash
df_test=$(df -h | grep sda3 | awk '{print $5}' | cut -d "%" -f1)
if [ "$df_test" -ge "90" ];then
echo 警告警告! /占用已到90
elif [ "$df_test" -le "60" ];then
echo /使用率尚未到达60
else
echo /使用率在60-90之间,健康
fi
判断用户输入的是否是目录
#!/bin/bash
read -p "请您输入一个路径,来显示是否为目录" -t 30 read_name
if [ -d "$read_name" ];then
echo "这是目录"
elif [ -f "$read_name" ];then
echo "这是一个文件"
else
echo "这不是一个有效路径"
fi