bash检查文件是否存在
本文概述
- 检查文件是否存在
- 检查目录是否存在
- 检查是否不存在文件
- 文件测试操作
在Bash中,我们可以使用“测试命令”来检查文件是否存在并确定文件的类型。
以下是test命令的语法,我们可以使用以下任何命令:
test expression
[ expression ]
[[ expression ]]
我们需要使用单个方括号“ [”命令来使我们的脚本可移植到所有POSIX Shell中。测试命令的升级版本包含双括号'[[‘ ,使用Bash,Zsh和Ksh作为默认Shell的大多数现代系统均支持该括号。
检查文件是否存在在检查文件是否存在时,最常用的文件运算符是-e和-f。 “ -e”选项用于检查文件的类型是否存在,而“ -f”选项仅在文件是常规文件(而不是目录或设备)时才用于返回真值。
检查文件是否存在的最常见选项是将测试命令与“ if conditional statement”一起使用。
以下是检查“ read_file.txt”文件是否存在的示例:
方法1
#!/bin/bashFile=read_file.txt
if test -f "$File";
then
echo "$File exist "
fi
方法二
#!/bin/bashFile=read_file.txt
if [ -f "$File" ];
then
echo "$File exist "
fi
方法3
#!/bin/bashFile=read_file.txt
if [[ -f "$File" ]];
then
echo "$File exist "
fi
输出量
这三种方法的输出都将如下所示,因为目录中存在一个文件(read_file.txt):
read_file.txt exist
如果我们想执行一个操作来根据文件是否存在提供结果,则可以按以下方式使用if / then构造:
例
#!/bin/bashFile=read_file.txt
if [ -f "$File" ];
then
echo "$File exist"
else
echo "$File does not exist"
fi
输出量
read_file.txt exist
我们也可以不带if语句就使用test命令。我们可以使用以下任何一种方法:
方法1
#!/bin/bashFile=read_file.txt
test -f read_file.txt &
&
echo "$File exist"
方法二
#!/bin/bashFile=read_file.txt
[ -f read_file.txt ] &
&
echo "$File exist"
方法3
#!/bin/bashFile=read_file.txt
[[ -f read_file.txt ]] &
&
echo "$File exist"
输出量
这三种方法的输出都将如下所示,因为目录中存在一个文件(read_file.txt):
read_file.txt exist
如果在运行后有几个命令要运行
例
#!/bin/bashFile=read_file.txt
[ -f read_file.txt ] &
&
{ echo "$File exist";
echo "Task Completed";
}
不像
例
#!/bin/bashFile=read_file.txt[ -f read_file.txt ] &
&
echo "$File exist" || echo "$File does not exist"
【bash检查文件是否存在】输出量
read_file.txt exist
这些是Bash中检查文件是否存在的常用方法。
检查目录是否存在运算符“ -d”使我们能够测试文件是否为目录。
以下是检查“ srcmini”目录是否存在的方法:
方法1
#!/bin/bashFile=srcmini
if [ -d "$File" ];
then
echo "$File is a directory"
fi
方法二
#!/bin/bashFile=srcmini
[ -d "$File" ] &
&
echo "$File is a directory"
注意:我们也可以使用双括号'[[‘ 代替单个括号'[‘ 。输出量
以上两种方法的输出将如下所示,因为我们在指定位置存在一个目录(名为srcmini):
srcmini is a directory
检查是否不存在文件可以使用感叹号(!-logical NOT运算符)来否定测试表达式。查看以下示例:
例
#!/bin/bashFile=missing_read_file.txt
if [ ! -f "$File" ];
then
echo "$File does not exist"
fi
上面的脚本也可以写成如下形式:
#!/bin/bashFile=missing_read_file.txt
[ ! -f "$File" ] &
&
echo "$File unavailable"
输出量
missing_read_file.txt unavailable
文件测试操作测试命令包括以下文件运算符,这些文件运算符使我们可以测试特定类型的文件:
-b文件返回 | 如果文件作为块特殊文件存在, 则为“真”。 |
-c文件返回 | 如果文件作为特殊字符文件存在, 则为“ True”。 |
-d文件返回 | 如果文件作为目录存在, 则为“ True”。 |
文件返回 | 如果文件作为文件存在, 则为“ True”, 而不管类型(节点, 目录, 套接字等)如何。 |
-f文件返回 | 如果文件作为常规文件(而不是目录或设备)存在, 则为“ True”。 |
-G文件返回 | 如果文件存在并且包含与用户运行命令相同的组, 则为“ True”。 |
-h文件返回 | 如果文件作为符号链接存在, 则为“ True”。 |
-g文件返回 | 如果文件存在并且包含set-group-id(sgid)标志集, 则为’ True’ 。 |
-k文件返回 | 如果文件存在并且包含粘性位标志集, 则为“ True”。 |
-L文件返回 | 如果文件作为符号链接存在, 则为“ True”。 |
-O文件返回 | 如果文件存在并且由运行命令的用户拥有, 则为“ True”。 |
-p文件返回 | 如果文件作为管道存在, 则为“ True”。 |
-r文件返回 | 如果FILE作为可读文件存在, 则为’ True’ 。 |
-S文件返回 | 如果文件作为套接字存在, 则为“ True”。 |
-s文件返回 | 如果文件存在且大小非零, 则为“ True”。 |
-u文件返回 | 如果文件存在, 则为“ True”, 并且设置了set-user-id(suid)标志。 |
-w文件返回 | 如果FILE作为可写文件存在, 则为’ True’ 。 |
-x文件返回 | 如果FILE作为可执行文件存在, 则为’ True’ 。 |
推荐阅读
- bash检查变量是否已设置
- bash写入文件write
- bash读取文件read
- bash使用数组
- bash使用函数
- bash连接字符串concat
- bash子串substring
- bash分割字符串spit
- bash查找字符串find
- 检查一个字符串的最大出现字符是否相同