Linux 如何理解unix中的“if[!-f$R_C_S_L/j_R_d*”…”?
请告诉我如何在Unix中像下面的语句一样进行调试。 如何一步一步地理解下面的代码在做什么Linux 如何理解unix中的“if[!-f$R_C_S_L/j_R_d*”…”?,linux,unix,ksh,Linux,Unix,Ksh,请告诉我如何在Unix中像下面的语句一样进行调试。 如何一步一步地理解下面的代码在做什么 if [ ! -f $R_C_S_L/j_r_d* ] then echo 0>$R_C_S_L/j_r_d fi [和]围绕谓词 是一个NOT谓词,从true到false否定括号之间的任何内容 -f是一个谓词,“文件存在吗?” $R_C_S_L是在别处定义的变量 *是一个通配符 然后启动if块 fi结束if块 echo{stuff}将内容打印到屏幕上 echo{stuff}>{file}
if [ ! -f $R_C_S_L/j_r_d* ]
then
echo 0>$R_C_S_L/j_r_d
fi
和[
围绕谓词李>]
是一个NOT谓词,从true到false否定括号之间的任何内容李>
是一个谓词,“文件存在吗?”-f
是在别处定义的变量$R_C_S_L
是一个通配符李>*
启动if块李>然后
结束if块李>fi
将内容打印到屏幕上李>echo{stuff}
将其重定向到文件echo{stuff}>{file}
$R_S_L
目录中的文件j_R_d
。”
参见$manbash
和[
围绕谓词李>]
是一个NOT谓词,从true到false否定括号之间的任何内容李>
是一个谓词,“文件存在吗?”-f
是在别处定义的变量$R_C_S_L
是一个通配符李>*
启动if块李>然后
结束if块李>fi
将内容打印到屏幕上李>echo{stuff}
将其重定向到文件echo{stuff}>{file}
$R_S_L
目录中的文件j_R_d
。”
请参阅
$manbash
这是一个if/then语句
if [ I_AM_TRUE ]
then
DO_ME
fi
then
有点像一个开始的括号,fi
有点像一个结束的括号
当文件名为文件且
放一把!在该表达式前面翻转了真值
所以-当文件名不是文件时,f FILENAME
为真
echo
打印出内容,而符号
将该内容重新定向到其他地方。VAR的值是通过键入$VAR
最后,*是一个通配符,因此它将匹配所有内容(不包括任何内容!)
因此,看起来您需要检查某个特定的文件前缀是否正在使用,如果没有,则创建该文件并将其置为零
要获得更完整的内容列表,您可以在if/then语句中进行测试(签出)或如上所述,在提示符处键入
mantest
。那将是一种很有男子气概的方法。这是一种“如果/然后”的说法
if [ I_AM_TRUE ]
then
DO_ME
fi
then
有点像一个开始的括号,fi
有点像一个结束的括号
当文件名为文件且
放一把!在该表达式前面翻转了真值
所以-当文件名不是文件时,f FILENAME
为真
echo
打印出内容,而符号
将该内容重新定向到其他地方。VAR的值是通过键入$VAR
最后,*是一个通配符,因此它将匹配所有内容(不包括任何内容!)
因此,看起来您需要检查某个特定的文件前缀是否正在使用,如果没有,则创建该文件并将其置为零
要获得更完整的内容列表,您可以在if/then语句中进行测试(签出)或如上所述,在提示符处键入
mantest
。这将是一个很有男子气概的方法。你从左到右阅读:
if [ ! -f $R_C_S_L/j_r_d* ]
我想如果和[是清楚的话
man [
把人工测试
带上来,我们看到:
NAME
test - check file types and compare values
SYNOPSIS
test EXPRESSION
test
[ EXPRESSION ]
[ ]
[ OPTION
再往下看:
-f FILE
FILE exists and is a regular file
哪个文件
$R_C_S_L/j_r_d*
从左边解析,其中$表示它是一个变量。通过自己编写变量并将它们粘在一起,我知道它将只包含L,所以$R_C_S_L是一个变量,然后/是目录分隔符,而j_R_d*是名称的一部分,带有全局模式
因此,将搜索一个目录,由$R_C_S_L引用,其中包含一个匹配j_R_d*的文件,这是测试,而!是否定,因此如果测试失败,则完成内部部分
echo 0 > $R_C_S_L/j_r_d
如果不存在与上述模式匹配的最短文件,则将0写入该文件。您可以从左到右读取该文件:
if [ ! -f $R_C_S_L/j_r_d* ]
我想如果和[是清楚的话
man [
把人工测试
带上来,我们看到:
NAME
test - check file types and compare values
SYNOPSIS
test EXPRESSION
test
[ EXPRESSION ]
[ ]
[ OPTION
再往下看:
-f FILE
FILE exists and is a regular file
哪个文件
$R_C_S_L/j_r_d*
从左边解析,其中$表示它是一个变量。通过自己编写变量并将它们粘在一起,我知道它将只包含L,所以$R_C_S_L是一个变量,然后/是目录分隔符,而j_R_d*是名称的一部分,带有全局模式
因此,将搜索一个目录,由$R_C_S_L引用,其中包含一个匹配j_R_d*的文件,这是测试,而!是否定,因此如果测试失败,则完成内部部分
echo 0 > $R_C_S_L/j_r_d
如果不存在与上述模式匹配的最短文件,则将0写入该文件。您的环境中是否有变量
R\u C\u S\u L
,或者在脚本中定义了该变量?这只是“如果没有文件与此路径匹配,则创建一个空文件”,但我们没有上下文来知道该路径。希望有人也能向您指出该路径n个页面解释了这一点(bash?test?)嗨,Rup,R_C_S_L是从环境中导出的一个参数。您如何将此语句理解为“如果没有文件匹配此路径,那么创建一个空文件”请告诉我在unix中我们可以在哪里找到[!-f…]还有像这样的语句?谢谢您的回答。请注意,如果