##########################条件测试操作########################
格式1:test 条件表达式
格式2:[ 条件表达式 ]
*************************************************************************************
-d:测试是否为目录(Directory)
-e:测试目录或文件是否存在(Exist)
-f:测试是否为文件(File)
-r:测试当前用户是否有权限读取(Read)
-w:测试当前用户是否有权限写入(Write)
-x:测试当前用户是否有权限执行(eXcute)
【1】
#########################预定义变量$?#########################
返回值$?为0 :表示存在此目录
[root@localhost media]# cd /dev
[root@localhost dev]# [ -d /dev/bus ]
[root@localhost dev]# echo $?
0 //返回值为0表示条件成立
[root@localhost dev]# ll
总用量 0
crw-rw---- 1 root video 10, 175 8月 21 02:29 agpgart
crw------- 1 root root 10, 235 8月 21 02:29 autofs
drwxr-xr-x 2 root root 180 8月 21 02:29 block
drwxr-xr-x 2 root root 80 8月 21 02:29 bsg
crw------- 1 root root 10, 234 8月 21 02:29 btrfs-control
drwxr-xr-x 3 root root 60 8月 21 02:29 bus
lrwxrwxrwx 1 root root 3 8月 21 02:29 cdrom -> sr0
*************************************************************************************
返回值$?(将不为0)为1时,目录不存在
[root@localhost ~]# cd /media
[root@localhost media]# [ -d /media/cdrom/Server ]
[root@localhost media]# echo $?
1 //返回值为1表示条件不成立
[root@localhost media]# ll
总用量 0
[root@localhost dev]# [ -d /media/cdrom ] && echo "YES" //条件不成立没有此目录
[root@localhost dev]# [ -d /dev/bus ] && echo "YES"
YES //条件成立有此目录{bus}
【2】
####################整数值比较###############################
-eq:等于(Equal)
-ne:不等于(Not Equal)
-gt:大于(Greater Than)
-lt:小于(Lesser Than)
-le:小于或等于(Lesser or Equal)
-ge:大于或等于(Greater or Equal)
[root@localhost dev]# Unum=`who | wc -l` //查看当前已登录用户
[root@localhost dev]# [ $Unum -gt 1 ] && echo "Too /many."
Too many. //测试结果大于
****************************************提取磁盘空闲内存*************************
[root@localhost dev]# FreeCC=$( free -m |grep "Mem:" | awk '{print $6}')
[root@localhost dev]# [ $FreeCC -lt 1024 ] && echo ${FreeCC} MB
430 MB
【3】
########################字符串比较##########################
=:字符串内容相同
!=:字符串内容不同,! 号表示相反的意思
-z:字符串内容为空
[root@localhost dev]# echo $LANG
zh_CN.UTF-8
[root@localhost dev]# [ $LANG != "en.US" ] && echo "Not en.us"
Not en.us // 字符串测试结果不等于
***********************************ACK*******************************************
[root@localhost dev]# read -p "是否覆盖现有文件(yes/no)?" ACK
是否覆盖现有文件(yes/no)?yes
[root@localhost dev]# [ $ACK = "yes" ] && echo "覆盖"
覆盖
[root@localhost dev]# read -p "是否覆盖现有文件(yes/no)?" ACK
是否覆盖现有文件(yes/no)?no
[root@localhost dev]# [ $ACK = "no" ] && echo "不覆盖"
不覆盖
【4】
########################逻辑测试###########################
常用的测试操作符
-a或&&:表示 “而且”的意思
-o或||: 表示 “或者”的意思
!: 表示 “否”
[root@localhost dev]# uname -r //查看内核版本
3.10.0-514.el7.x86_64
[root@localhost dev]# Mnum=$(uname -r | awk -F. '{print $1}')
[root@localhost dev]# Snum=$(uname -r | awk -F. '{print $2}')
[root@localhost dev]# [ $Mnum -ge 3 ] && [ $Snum -gt 4 ] && echo "符合要求"
符合要求
【5】
############################if条件语句#######################
单分支结构
if 条件测试
then
命令判断
fi
*****************
双分支结构
if 条件测试
then
命令序列1
else
命令序列2
fi
*****************
多分支结构
if 条件测试操作1
then
命令序列1
elif 条件测试操作2
then
命令序列2
else
命令序列3
fi
*******************************单分支if语句***************************************
例1:
[root@localhost dev]# vi chkmountdir.sh
[root@localhost dev]# cat chkmountdir.sh
#!/bin/bash
MOUNT_DIR="/media/cdrom/"
if [ ! -d $MOUNT_DIR ]
then
mkdir -p $MOUNT_DIR
fi
[root@localhost dev]# chmod +x chkmountdir.sh
[root@localhost dev]# ./chkmountdir.sh
例2:
[root@localhost opt]# vi hkmountdir.sh
[root@localhost opt]# chmod +x hkmountdir.sh
[root@localhost opt]# ./hkmountdir.sh
[root@localhost opt]# ll
总用量 33792
-rw-r--r--. 1 root root 1071074 8月 8 00:44 apr-1.6.2.tar.gz
-rw-r--r--. 1 root root 565507 8月 8 00:44 apr-util-1.6.0.tar.gz
drwxr-xr-x 2 root root 6 8月 21 06:51 cdrom
-rwxr-xr-x 1 root root 91 8月 21 06:50 hkmountdir.sh
drwxr-xr-x. 12 501 games 4096 8月 8 00:47 httpd-2.4.25
drwxr-xr-x. 2 root root 6 3月 26 2015 rh
[root@localhost opt]# cat hkmountdir.sh
#!/bin/bash
MOUNT_DIR="/opt/cdrom/"
if [ ! -d $MOUNT_DIR ]
then
mkdir -p $MOUNT_DIR
fi
*******************************双分支if语句**************************************
[root@localhost ~]# cd /opt
[root@localhost opt]# vi pinghost.sh
[root@localhost opt]# cat pinghost.sh
#!/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
[root@localhost opt]# chmod +x pinghost.sh
[root@localhost opt]# ./pinghost.sh 192.168.30.12
Host 192.168.30.12 is up.
*****************************多分支if语句*****************************************
[root@localhost opt]# vi gradediv.sh
[root@localhost opt]# cat gradediv.sh
#!/bin/bash
read -p "请输入您的分数(0-100):" GRADE
if [ $GRADE -gt 100 ]
then
echo "$GRADE 分,大于100分了,输入有问题"
elif [ $GRADE -ge 85 ] && [ $GRADE -le 100 ]
then
echo "$GRADE 分,优秀!"
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ]
then
echo "$GRADE 分,合格!"
else
echo "$GRADE 分,不合格!"
fi
[root@localhost opt]# chmod +x gradediv.sh
[root@localhost opt]# ./gradediv.sh
请输入您的分数(0-100):101
101 分,大于100分了,输入有问题
[root@localhost opt]# ./gradediv.sh
请输入您的分数(0-100):22
22 分,不合格!
[root@localhost opt]# ./gradediv.sh
请输入您的分数(0-100):88
88 分,优秀!