Linux 如何理解unix中的“if[!-f$R_C_S_L/j_R_d*”…”?

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}

请告诉我如何在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}
    将其重定向到文件
上述说法可以这样翻译:

“如果存在一个文件,该文件位于目录$R_C_S_L中,以字母j_R_d开头,则将'0'写入
$R_S_L
目录中的文件
j_R_d
。”

参见
$manbash

  • [
    ]
    围绕谓词
  • 是一个NOT谓词,从true到false否定括号之间的任何内容
  • -f
    是一个谓词,“文件存在吗?”
  • $R_C_S_L
    是在别处定义的变量
  • *
    是一个通配符
  • 然后
    启动if块
  • fi
    结束if块
  • echo{stuff}
    将内容打印到屏幕上
  • echo{stuff}>{file}
    将其重定向到文件
上述说法可以这样翻译:

“如果存在一个文件,该文件位于目录$R_C_S_L中,以字母j_R_d开头,则将'0'写入
$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…]还有像这样的语句?谢谢您的回答。请注意,如果