shell中if语句---test之文件比较

本文详细介绍Shell脚本中如何使用if语句结合test命令进行文件的比较与属性检查,包括文件存在性、类型、权限、归属及文件新旧比较等,通过实际代码示例展示各种操作的具体应用。

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

shell中if语句—test之文件比较

1.文件比较

比较说明
-d file检查file是否存在并是一个目录
-e file检查file是否存在
-f file检查file是否存在并是一个文件
-r file检查file是否存在并可读
-s file检查file是否存在并非空
-w file检查file是否存在并可写
-x file检查file是否存在并可执行
-O file检查file是否存在并属当前用户所有
-G file检查file是否存在并且默认组与当前用户相同
file1 -nt file2检查file1是否比file2新
file1 -ot file2检查file1是否比file2旧

2.检查file是否存在并是一个目录

#!/bin/bash

#检查file是否存在并是一个目录
if [ -d $HOME ]
then
	echo "Your HOME directroy exists"
	cd $HOME
	ls -a
else
	echo "There is a problem with your HOME directory"
fi

注意:此处的$HOME是shell中的环境变量
在这里插入图片描述

3.-e检查file是否存在

#!/bin/bash

#-e检查file是否存在
if [ -e $HOME ]
then
	echo "Your HOME directory exists,now chech to the file"
	if [ -e $HOME/check ]		#如果文件存在
	then
		echo "Appending date to existing file"
		date >> $HOME/check		#追加date信息到文件中
	else						#如果文件不存在
		echo "Creating new file"
		date > $HOME/check		#将date信息输入到文件
	fi
else
	echo "Sorry,your HOME directory dose not exist"
fi

在这里插入图片描述

4.-f检查file是否存在并是一个文件

#!/bin/bash

#-f检查file是否存在并是一个文件

if [ -e $HOME ]				#先检查目录是否存在
then
	echo "The directory exists,now check is it a file"
	if [ -f $HOME ]		
	then
		echo "YES,it is a file!!"
	else
		echo "NO,it is not a file!!"
		if [ -f $HOME/check ]
		then
			echo "But $HOME/check is a file" 
		fi
	fi
else						#如果目录不存在,执行下面内容
	echo "Sorry,the directory does not exist"
fi

在这里插入图片描述

5.-r检查文件是否存在并可读

#!/bin/bash

# -r检查文件是否存在并可读

pwdfile=/etc/shadow

if [ -f $pwdfile ]		#先检查$pwdfile是否存在并是一个文件
then 
	if [ -r $pwdfile ]	#满足上面条件再检查它是否可读
	then
		tail $pwdfile
	else
		echo "Sorry,Permission denied.unable to read"
	fi
else
	echo "Sorry.the file $pwdfile does not exist"	
fi

可读的结果:
在这里插入图片描述
不可读的结果:
在这里插入图片描述

6.-s检查文件是否存在并为非空

#!/bin/bash

# -s检查文件是否存在并为非空

file=test
touch $file

if [ -s $file ] 
then
	echo "The file $file exists and has data in it"
else
	echo "The $file exists and is empty"
fi

第一次执行:
在这里插入图片描述
第二次执行:
在这里插入图片描述

7.-w检查文件是否存在并可写

#!/bin/bash

# -w检查文件是否存在并可写

logfile=logfile
touch $logfile
chmod u-w $logfile
now=`date +%Y%m%d-%H%M`

if [ -w $logfile ] 
then
	echo "The program ran at : $now" > logfile
	echo "The first attempt succeeded"
else
	echo "The first attempt failed"
fi

chmod u+w $logfile

if [ -w $logfile ] 
then
	echo "The program ran at : $now" > logfile
	echo "The first attempt succeeded"
else
	echo "The first attempt failed"
fi

执行时使用普通用户:
在这里插入图片描述
执行结果:
在这里插入图片描述

8.-x检查文件是否存在并可执行

#!/bin/bash
# -x检查文件是否存在并可执行

if [ -x 10.sh ]
then
	echo "You can run the script:"
	./10.sh
else
	echo "Sorry,you are unable to execute the script"
fi

在这里插入图片描述

9.-O检查file是否存在并属当前用户所有

#!/bin/bash
# -O检查file是否存在并属当前用户所有

if [ -O /etc/passwd ]
then
	echo "You are the owner of the file"
else
	echo "Sorry,you are not the owner of the file"
fi

在这里插入图片描述

10.-G检查文件是否存在并且默认组与当前用户相同

#!/bin/bash
# -G检查文件是否存在并且默认组与当前用户相同

if [ -G $HOME/check ]
then
	echo "You are in the same group as the file"
else
	echo "The file is not owned by your group"
fi

在这里插入图片描述

11.比较文件的新旧

#!/bin/bash
# -nt检查file1是否比file2新
# -ot检查file1是否比file2旧

if [ 1.sh -nt 2.sh ]
then
	echo "The 1.sh file is newer than 2.sh"
else
	echo "The 2.sh file is newer than 1.sh"
fi


if [ 3.sh -ot 4.sh ]
then
	echo "The 3.sh file is older than 4.sh"
else
	echo "The 4.sh file is older than 3.sh"
fi

在这里插入图片描述

12.多个条件同时比较

#!/bin/bash

if [ -d $HOME ] && [ -w $HOME/check ]
then
	echo "The file exists and you can write it"
else
	echo "You cannot write the file"
fi

在这里插入图片描述

13.test命令中可使用变量

在test中使用变量需要用双方括号包围[[ ]]

#!/bin/bash
if [[ $USER == r*  ]]
then
	echo "Hello $USER"
else
	echo "Sorry.I donot know you"
fi

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值