Creating platform-agnostic application packages with Habitat
目录:
很多时候编写Shell脚本时,您可能会发现自己需要根据文件是否存在执行操作。
在Bash中,可以使用test命令检查文件是否存在并确定文件的类型。
test命令采用以下语法格式之一:
检查文件是否存在
检查文件是否存在时,最常用的FILE运算符是
-e
和
-f
。 第一个将检查文件是否存在而与类型无关,而第二个将仅在FILE是常规文件(而不是目录或设备)的情况下返回true。
检查文件是否存在时,最易读的选项是将测试命令与if语句结合使用。 以下任何代码段都将检查
/etc/resolv.conf
文件是否存在:
FILE=/etc/resolv.conf if test -f "$FILE"; then echo "$FILE exist" fi
FILE=/etc/resolv.conf if; then echo "$FILE exist" fi
FILE=/etc/resolv.conf if]; then echo "$FILE exist" fi
如果要基于文件是否存在执行其他操作,只需使用if / then构造:
FILE=/etc/resolv.conf if; then echo "$FILE exist" else echo "$FILE does not exist" fi
处理名称中包含空格的文件时,请始终使用双引号来避免出现问题。
您也可以使用不带if语句的test命令。 仅当测试命令的退出状态为true时,才会执行
&&
运算符之后的命令,
test -f /etc/resolv.conf && echo "$FILE exist"
&& echo "$FILE exist"
] && echo "$FILE exist"
&& { echo "$FILE exist"; cp "$FILE" /tmp/; }
与
&&
相反,
||
之后的语句 仅当test命令的退出状态为
false
时,才执行operator。
&& echo "$FILE exist" || echo "$FILE does not exist"
检查目录是否存在
运算符
-d
允许您测试文件是否为目录。
例如,要检查
/etc/docker
目录是否存在,可以使用:
FILE=/etc/docker if; then echo "$FILE is a directory" fi
&& echo "$FILE is a directory"
您也可以使用双括号
, 'linuxize_com-medrectangle-4', 'ezslot_7', 160, '0', '0']));
检查文件是否不存在
与许多其他语言相似,可以使用
!
否定测试表达式
!
(感叹号)逻辑非运算符:
FILE=/etc/docker if; then echo "$FILE does not exist" fi
与上述相同:
&& echo "$FILE does not exist"
检查是否存在多个文件
代替使用复杂的嵌套if / else构造,可以使用
-a
(或
&&
和
; then echo "$FILE is a directory" fi
FILE=/etc/docker if; then echo "$FILE is a directory" fi
不使用IF语句的等效变体:
&& echo "both files exist"
文件测试操作员
test命令包含以下FILE运算符,可用于测试特定类型的文件:
-
-bFILE如果FILE存在并且是块特殊文件,则为true。-cFILE如果FILE存在并且是特殊字符文件,则为true。-dFILE如果FILE存在并且是目录,则为true。-eFILE如果FILE存在且是一个文件,则与类型(节点,目录,套接字等)无关,为true。-fFILE如果FILE存在并且是常规文件(不是目录或设备),则为true。-GFILE如果FILE存在并且与运行命令的用户具有相同的组,则为True。-hFILE如果FILE存在并且是符号链接,则为true。-gFILE如果FILE存在并且设置了set-group-id(sgid)标志,则为true。-kFILE如果FILE存在并且设置了粘性位标志,则为true。-LFILE如果FILE存在并且是符号链接,则为true。-OFILE如果FILE存在并且由运行命令的用户拥有,则为true。-pFILE如果FILE存在并且是管道,则为true。-rFILE如果FILE存在且可读,则为true。-SFILE如果FILE存在并且是套接字,则为true。-sFILE如果FILE存在且大小非零,则为true。-uFILE如果存在并且设置了set-user-id(suid)标志,则为true。-wFILE如果FILE存在且可写,则为true。-xFILE如果FILE存在且可执行,则为true。
结论
在本指南中,我们向您展示了如何使用Bash检查文件或目录是否存在。
bash终端






