Shell脚本条件测试

五迷三道 提交于 2019-12-04 21:09:57

toc

Shell 条件测试

格式1: test 条件表达式
格式2: [ 条件表达式 ]
格式3: [[ 条件表达式 ]]

文件测试

[ -e dir|file ]测试文件或目录是非存在
[ -d dir ] 测试是否存在,而且是目录
[ -f file ] 测试是否存在,而且是文件
[ -r file ] 测试文件是否有读权限
[ -x file ] 测试文件是否有执行权限
[ -w file ] 测试文件是否有写权限
[ -L file ] 测试文件是否是链接文件
[ -b file ] 测试文件是否是块设备
[ -c file ] 测试文件是否是字符设备
[ -s file ] 测试文件是否存在且非空
[ -S file ] 测试文件是否是socket
[ file1 -nt file2 ] 第一个文件比第二个文件新
[ file1 -ot file2 ] 第一个文件比第二个文件旧
[ file1 -ef file2 ] 第一个文件与第二个文件是同一个设备inode

命令行使用方式

## 测试 /soft 目录是否存在,不存在就创建 /soft 目录
[root@Shell ~]# [ ! -d /soft ] && mkdir /soft
[root@Shell ~]# [ -d /soft ] || mkdir /soft

脚本使用方式

#!/usr/bin/bash
## 定义备份目录站点
dir=/soft/code
if [ ! -d $dir ];then
mkdir -p $dir
fi
ls $dir

数值比较

数值比较 [ 整数1 操作符 整数2 ]
[ 1 -gt 10 ] 大于
[ 1 -lt 10 ] 小于
[ 1 -eq 10 ] 等于
[ 1 -ne 10 ] 不等于
[ 1 -ge 10 ] 大于等于
[ 1 -le 10 ] 小于等于

查看磁盘/当前使用状态,如果使用率超过80%则记录在 /tmp/disk_use.txt 文件(可以改成邮件报警)

#!/usr/bin/bash
Disk_Free=$(df -h|grep "/$"|awk '{print $5}'|awk -F '%' '{print $1}')
if [ $Disk_Free -ge 80 ];then
    echo "Disk Is Use:${Disk_Free}%" > /tmp/disk_use.txt
fi

逻辑判断

&&(-a) 两个条件必须都为真,才为真否则为假
||(-o)两个条件都为假,才为假否则为真
! 条件或命令为假时,则结果为真

## 比较1小于2同时5大于10,两个条件必须都为真(and)
[root@Shell ~]# [ 1 -lt 2 -a 5 -gt 10 ];echo $?
[root@Shell ~]# [[ 1 -lt 2 && 5 -gt 10 ]];echo $?
## 比较1小于2同时5大于10,两个条件一个为真 (or)
[root@Shell ~]# [ 1 -lt 2 -o 5 -gt 10 ];echo $?
[root@Shell ~]# [[ 1 -lt 2 || 5 -gt 10 ]];echo $?

字符串比较

=或== 等于
!= 不等于
-z 测试字符串是否为空,孔则为真
-n 测试字符串是否非空,非空为真

[root@Shell ~]# [ "$USER" = "root" ];echo $?
[root@Shell ~]# [ "$USER" != "nobody" ];echo $?
## 设个空值的变量,用-z和-n测试一下
[root@Shell ~]# BBB=""
[root@Shell ~]# [ -z "$BBB" ] ;echo $?
[root@Shell ~]# [ -n "$BBB" ] ;echo $?

正则对比

## 判断变量是不是以 **r** 开头的
[root@Shell ~]# [[ "$USER" =~ ^r ]];echo $?
## 判断变量是不是数字
[root@bgx]# num=123
[root@bgx]# [[ "$num" =~ ^[0-9]+$ ]];echo $?

批量创建用户脚本

#!/usr/bin/bash
read -p "Please input number: " num
if [[ ! "$num" =~ ^[0-9]+$ ]];then
    echo "error number!" && exit 1
fi
read -p "Please input prefix: " prefix
if [ -z "$prefix" ];then
    echo "error prefix"
    exit
fi
for i in `seq $num`
do
    user=$prefix$i
    useradd $user
    echo "123" |passwd --stdin $user &>/dev/null
     if [ $? -eq 0 ];then
        echo "$user is created."
    fi
done
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!