Bash 了解脚本以检查文件是否存在
我使用以下命令检查文件是否存在,如果不可用,则创建它:Bash 了解脚本以检查文件是否存在,bash,file,unix,Bash,File,Unix,我使用以下命令检查文件是否存在,如果不可用,则创建它: if test "${LOG_FILE:=}x" != "x"; then touch $LOGAP exit_code=$? fi 请帮助我理解这个脚本,测试条件如何“${LOG\u FILE:=}x”!=“x”用于检查是否存在EXIXT。我正在使用bashshell。基本思想 脚本检查是否设置了$LOG\u FILE变量。如果是,它将接触存储在$LOGAP中的文件名 解释 让我们把它分开: test == if 所以
if test "${LOG_FILE:=}x" != "x"; then
touch $LOGAP
exit_code=$?
fi
请帮助我理解这个脚本,测试条件如何
“${LOG\u FILE:=}x”!=“x”
用于检查是否存在EXIXT。我正在使用bashshell。基本思想脚本检查是否设置了
$LOG\u FILE
变量。如果是,它将接触存储在$LOGAP
中的文件名
解释让我们把它分开:
test == if
所以
与
if [ "${LOG_FILE:=}x" != "x" ]; then
让我们做一个测试:
LOG_FILE="FILE_TEST"
echo "${LOG_FILE:=}x"
将输出
FILE_TESTx
因此,它所做的是检查变量LOG\u FILE
是否被设置。如果设置了
[ "${LOG_FILE:=}x" != "x" ]
[ "${LOG_FILE:=}x" != "x" ]
将是
[ "FILE_TESTx" != "x" ]
[ "x" != "x" ]
这是真的
如果未设置日志文件
将是
[ "FILE_TESTx" != "x" ]
[ "x" != "x" ]
这是错误的
也就是说,x
是一个开始。你可以把它改成
[ "${LOG_FILE:=}HELLO_MY_NAME_IS_BLABLA" != "HELLO_MY_NAME_IS_BLABLA" ]
最后,你有一个
touch $LOGAP
这将触摸
(如果未创建文件,则创建文件,如果已存在,则更新修改日期)。它还需要设置变量$LOGAP
必须指出,检查文件是否存在的最快方法是:
if [ ! -f /tmp/foo.txt ]; then
...
fi
基本理念
脚本检查是否设置了
$LOG\u FILE
变量。如果是,它将接触存储在$LOGAP
中的文件名
解释让我们把它分开:
test == if
所以
与
if [ "${LOG_FILE:=}x" != "x" ]; then
让我们做一个测试:
LOG_FILE="FILE_TEST"
echo "${LOG_FILE:=}x"
将输出
FILE_TESTx
因此,它所做的是检查变量LOG\u FILE
是否被设置。如果设置了
[ "${LOG_FILE:=}x" != "x" ]
[ "${LOG_FILE:=}x" != "x" ]
将是
[ "FILE_TESTx" != "x" ]
[ "x" != "x" ]
这是真的
如果未设置日志文件
将是
[ "FILE_TESTx" != "x" ]
[ "x" != "x" ]
这是错误的
也就是说,x
是一个开始。你可以把它改成
[ "${LOG_FILE:=}HELLO_MY_NAME_IS_BLABLA" != "HELLO_MY_NAME_IS_BLABLA" ]
最后,你有一个
touch $LOGAP
这将触摸
(如果未创建文件,则创建文件,如果已存在,则更新修改日期)。它还需要设置变量$LOGAP
必须指出,检查文件是否存在的最快方法是:
if [ ! -f /tmp/foo.txt ]; then
...
fi
你在用什么外壳?@easterbunny,它是bash shell你在用什么外壳?@easterbunny,它是bash shell非常感谢!我在讨论中提到的命令和带有-f选项的if命令之间有什么区别吗?它们只是替代解决方案。我是否可以每次使用带有-f选项的if命令来检查文件是否存在?我强烈建议您使用
if[-f file]
。您发布的版本只是检查变量是否已定义,而不管它们指示的文件是什么。此外,当您确实需要测试变量以查看它是否已设置且不为空时,最好是[-n“$variable”]
(或者确保它为空[-z“$variable”]
)。如果您想测试即使变量设置为空也是否设置了该变量,这是可行的:[-n“${variable+set}”]
(${variable+set}
如果变量设置为空,则扩展为单词“set”;如果变量未设置,则根本没有任何内容-+发挥了神奇的作用,字符串“set”是任意的,您可以使用任何东西。如果您将+替换为:+,那么变量必须设置为非空。)非常感谢!我在讨论中提到的命令和带有-f选项的if命令之间有什么区别吗?它们只是替代解决方案。我是否可以每次使用带有-f选项的if命令来检查文件是否存在?我强烈建议您使用if[-f file]
。您发布的版本只是检查变量是否已定义,而不管它们指示的文件是什么。此外,当您确实需要测试变量以查看它是否已设置且不为空时,最好是[-n“$variable”]
(或者确保它为空[-z“$variable”]
)。如果您想测试即使变量设置为空也是否设置了该变量,这是可行的:[-n“${variable+set}”]
(${variable+set}
如果变量设置为空,则扩展为单词“set”;如果变量未设置,则根本没有任何内容-+发挥了神奇的作用,字符串“set”是任意的,您可以使用任何东西。如果将+替换为:+,则变量必须设置为非空。)