Linux Shell之if条件判断语句

1.条件判断语句概述

if条件判断语句在Shell自动化运维脚本的开发中至关重要,利用条件判断可实现对象(文件、目录)的类型、状态、属性判断,数值比较、字符串比较以及更加复杂的逻辑。
if条件判断的基本语法是:

if [ command ];then
   符合该条件执行的语句
elif [ command ];then
   符合该条件执行的语句
else
   符合该条件执行的语句
fi

需要注意的是shell脚本的语法格式要求非常严格,必须按格式要求写。如[]里边必须要加空格,必须要写成if_[_条件_];then,其中_代表空格。
Shell支持复杂逻辑判断,可以使用传统的&&、||、!,也可以更方便地使用以下语法

-a 与
-o 或
! 非

举例:条件如果a>b且a,既可以写成

if [[ $a > $b ]] && [[ $a < $c ]]

也可以写成更简单的

if [ $a -gt $b -a $a -lt $c ]

2.文件/目录判断

2.1只判断是否存在

-e 判断对象是否存在

举例:判断文件/etc/mysql.cnf是否存在

if [ -e "/etc/mysql.cnf" ];then
   echo "File exists"
fi

判断文件不存在

if [ ! -e "/etc/mysql.cnf" ];then
   echo "File not exists"
fi

注意格式if_[_!_-e_"/etc/mysql.cnf"_];then,其中_代表空格,没有空格脚本错误。

2.2判断存在且判断文件类型

-d 判断对象是否存在,并且为目录
-f 判断对象是否存在,并且为常规文件
-L 判断对象是否存在,并且为符号链接
-h 判断对象是否存在,并且为软链接
-S 判断对象是否存在,并且为套接字
-b 判断对象是否存在,并且为块设备
-p 判断对象是否存在,并且为管道文件
-c 判断对象是否存在,并且为字符设备

举例:判断目录/opt/install是否存在

if [ -d "/opt/install" ];then
   echo "Dir exists"
fi

linux七种文件类型:

==普通文件类型 ==
Linux中最多的一种文件类型, 包括 纯文本文件(ASCII)/二进制文件(binary)/数据格式的文件(data)/各种压缩文件.第一个属性为 [-]
目录文件
可以使用 cd 命令进入。第一个属性为 [d],例如 [drwxrwxrwx]
块设备文件
存储数据以供系统存取的接口设备,简单而言就是硬盘。第一个属性为 [b]
字符设备
串行端口的接口设备,例如键盘、鼠标等等。第一个属性为 [c]
套接字文件
通常用在网络数据连接。可以启动一个程序来监听客户端的要求,客户端就可以通过套接字来进行数据通信。第一个属性为 [s],最常在 /var/run目录中看到这种文件类型
管道文件
FIFO也是一种特殊的文件类型,它主要的目的是,解决多个程序同时存取一个文件所造成的错误。FIFO是first-in-first-out(先进先出)的缩写。第一个属性为 [p]
链接文件
类似Windows下面的快捷方式。第一个属性为 [l],例如 [lrwxrwxrwx]

2.3判断文件是否有内容

-s 判断对象是否存在,并且长度不为0
举例:判断文件/etc/mysql.cnf是否有内容

if [ -s "/etc/mysql.cnf" ];then
   echo "File has content"
fi

2.4判断读写权限

-r 判断对象是否存在,并且可读
-w 判断对象是否存在,并且可写
-x 判断对象是否存在,并且可执行
-O 判断对象是否存在,并且属于当前用户
-G 判断对象是否存在,并且属于当前用户组

2.5比较文件创建时间

-nt 判断file1是否比file2新 [ “/data/file1” -nt “/data/file2” ]
-ot 判断file1是否比file2旧 [ “/data/file1” -ot “/data/file2” ]

3.字符串判断

[ -z str] 判断字符串是否为空,作为zero的缩写
[ -n str] 判断字符串是否不为空,与-z相反
[ str1 = str2] 判断字符串内容是否相同
[ str1 != str2] 判断字符串内容是否相同
[ str]  与[ -n str] 等效

4.数值判断

INT1 -eq INT2 INT1和INT2两数相等为真 ,=
INT1 -ne INT2 INT1和INT2两数不等为真 ,<>
INT1 -gt INT2 INT1大于INT1为真 ,>
INT1 -ge INT2 INT1大于等于INT2为真,>=
INT1 -lt INT2 INT1小于INT2为真
INT1 -le INT2 INT1小于等于INT2为真,<=

你可能感兴趣的:(linux,shell)