Byt*_*der 25
使用这个简单的 Bash one-liner:
if [ -e FILENAME ] ; then echo Yes ; fi
Run Code Online (Sandbox Code Playgroud)
该-e检查的计算结果为真,如果FILENAME存在,不管它是什么(文件,目录,链接,设备,...)。
如果您只想检查常规文件,请-f改用,正如@Arronical所说。
gro*_*lex 10
您可以使用这个简单的脚本:
#!/bin/bash
if [[ -f $1 ]]; then
echo "Yes"
exit 0
else
exit 1
fi
Run Code Online (Sandbox Code Playgroud)
将其另存为file-exists.sh. 然后,在终端中,键入chmod +x file-exists.sh。
像这样使用它:用要检查的文件./file-exists.sh FILE替换FILE的位置,例如:
./file-exists.sh file.txt
Run Code Online (Sandbox Code Playgroud)
如果file.txt存在,Yes将打印到终端,并且程序将以状态 0(成功)退出。如果文件不存在,则不会打印任何内容,程序将以状态 1(失败)退出。
如果您好奇我为什么包含该exit命令,请继续阅读...
exit的命令?exit导致正常进程终止。这基本上意味着:它停止脚本。它接受一个可选的(数字)参数,该参数将是调用它的脚本的退出状态。
此退出状态使您的其他脚本能够使用您的file-exists脚本,并且是它们知道文件存在与否的方式。
使用此脚本的一个简单示例是此脚本(将其另存为file-exists-cli.sh):
#!/bin/bash
echo "Enter a filename and I will tell you if it exists or not: "
read FILE
# Run `file-exists.sh` but discard any output because we don't need it in this example
./file-exists.sh $FILE &>> /dev/null
# #? is a special variable that holds the exit status of the previous command
if [[ $? == 0 ]]; then
echo "$FILE exists"
else
echo "$FILE does not exist"
fi
Run Code Online (Sandbox Code Playgroud)
做通常的chmod +x file-exists-cli.sh然后运行它:./file-exists-cli.sh。你会看到这样的东西:
文件存在 ( exit 0):
? ~ ./file-exists-cli.sh
Enter a filename and I will tell you if it exists or not:
booleans.py
booleans.py exists
Run Code Online (Sandbox Code Playgroud)
文件不存在 ( exit 1):
? ~ ./file-exists-cli.sh
Enter a filename and I will tell you if it exists or not:
asdf
asdf does not exist
Run Code Online (Sandbox Code Playgroud)
在命令行的 bash shell 中。
if [[ -f /path/to/file ]]; then echo "Yes"; fi
Run Code Online (Sandbox Code Playgroud)
这使用 bash 条件运算符-f,并检查文件是否存在并且是常规文件。如果要测试任何文件,包括目录和链接,请使用-e.
做你想做的最短命令是:
test -e FILENAME && echo Yes
Run Code Online (Sandbox Code Playgroud)
test -e将测试给定的名称是否存在于文件系统中。(您可以使用test -f限制为仅常规文件。有关man test更多信息,请参见。)
如果给定的条件评估为真,则test返回成功退出状态(否则返回失败状态)。我们使用 组合这两个命令&&,这意味着“如果前一个命令以成功状态退出,则执行下一个命令”。下一个命令只是Yes在标准输出上打印;在交互式 shell 的情况下,在终端上。
这避免了if语句的额外文本材料,但给出了相同的结果。当仅涉及单个命令时&&,使用(或其相反的||)将命令联系在一起效果很好。如果您想要做的不仅仅是执行单个命令来响应单个命令的退出状态,那么使用该if语法很快就会变得更具可读性。
正如其他答案中已经指出的那样,等效的if样式结构是:
if test -e FILENAME; then echo Yes; fi
Run Code Online (Sandbox Code Playgroud)
或者:
if test -e FILENAME
then
echo Yes
fi
Run Code Online (Sandbox Code Playgroud)
出于这些目的,[和test是等效的,除了[需要终止].
| 归档时间: |
|
| 查看次数: |
2337 次 |
| 最近记录: |