您的位置:首页 > 运维架构 > Shell

shell文件类型和流程控制

2018-09-11 21:05 162 查看

我们下来看一些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
阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: