一、条件判断
格式1:test 条件表达式
格式2:[条件表达式]
格式3:[[条件表达式]]
-e 是否存在,不管是文件还是目录,只要存在,条件就成立。
-f 是否为普通文件
-d 是否为目录
-S socket
-p pipe
-c character
-b black
-L 软link
-s 是否文件不为空
-r 当前用户对其是否可读
-w 当前用户对其是否可写
-x 当前用户对其是否可执行
-u 是否有suid
-g 是否有sgid
-k 是否有t位
[root@localhost ~]
0
[root@localhost ~]
1
[root@localhost ~]
0
[root@localhost ~]
1
[root@localhost ~]
0
[root@localhost ~]
1
两个文件的比较判断
test file1 -nt file2 比较file1是否比file2新
test file1 -ot file2 比较file1是否比file2旧
test file1 -ef file2 比较是否为同一个文件,或者用于判断硬链接,是否指向同一个inode
整数之间的判断
-eq 相等
-ne 不等
-gt 大于
-lt 小于
-ge 大于等于
-le 小于等于
字符串之间的判断
-z 是否为空字符串
-n 是否为非空字符串
多重条件判断
[root@localhost ~]
hello
[root@localhost ~]
[root@localhost ~]
hello
[root@localhost ~]
二、实例
1、判断一个IP是否互通
read -p "INPUT IP:" IP
ping $IP -c4 &>/dev/null
if [ $? -eq 0 ];then
echo "OK!"
else
echo "NO!"
fi
或者
ping $1 -c4 &>/dev/null
if [ $? -eq 0 ];then
echo "OK!"
else
echo "NO!"
fi
或者
if [ $# -ne 1 ];then
echo "usage:./ping.sh IP" && exit
fi
ping $1 -c4 &>/dev/null && echo "OK!" || echo "NO!"
2、判断一个进程是否存在
read -p "INPUT Process:" process
pidof $process &>/dev/null
if [ $? -eq 0 ];then
echo "$process OK"
else
echo "$process NO"
fi
3、判断一个web服务是否正常
wget http://www.baidu.com &>/dev/null
[ $? -eq 0 ] && rm -f /root/index.* && echo "OK!" || echo "NO!"
4、判断用户是否存在
read -p "INPUT USER:" user
id $user &>/dev/null
[ $? -eq 0 ] && echo "OK!" || echo "NO!"
5、判断一个服务是否安装,如未安装则进行安装
read -p "请输入服务名:" name
rpm -qa|grep $name &>/dev/null
if [ $? -eq 0 ];then
echo "$name 已安装。"
else
yum install -y vsftpd &>/dev/null
echo "$name服务安装中。。。"
[ $? -eq 0 ] && echo "安装成功" || echo "安装失败"
fi
6、判断内核主版本是否等于2,次版本是否大于6
kernal=`uname -r`
var1=`echo $kernal|cut -d. -f1`
var2=`echo $kernal|cut -d. -f2`
[[ $var1 -eq 2 && $var2 -ge 6 ]] && echo "kernal yes!" || echo "kernal no!"
7、判断vsftpd服务启动没,如果启动则输出端口和pid号
systemctl status vsftpd &>/dev/null
if [ $? -eq 0 ];then
port=`netstat -tlunp|grep vsftpd|cut -d: -f4|cut -d' ' -f1`
pid=`pidof vsftpd`
echo -e "服务已启动,port:$port,pid:$pid"
else
systemctl start vsftpd &>/dev/null
port=`netstat -tlunp|grep vsftpd|cut -d: -f4|cut -d' ' -f1`
pid=`pidof vsftpd`
echo -e "服务已启动,port:$port,pid:$pid"
fi