Linux Shell之if条件判断语句

本文详细介绍了Linux Shell脚本中的if条件判断语句,包括文件/目录判断,如文件是否存在、文件类型、文件内容及权限检查,以及字符串和数值的比较。通过示例展示了如何进行复杂逻辑的条件表达式编写,如判断文件是否存在、是否为空、读写权限以及文件创建时间的比较。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.条件判断语句概述

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

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

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

-a 与
-o 或
! 非

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

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为真,<=

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值