这个bash if语句是什么意思?

时间:2014-08-01 18:18:23

标签: bash

以下bash脚本的含义是什么:

if [ -d "directory name" -a ! -L "directory name" ]; then # do something fi 我能理解到这里:

  

if [-d"目录名称"

但在此之后我失去了。除了解释之外,还要考虑解释-a的文档。 -L

5 个答案:

答案 0 :(得分:3)

-L运算符测试其参数是否为符号链接。它也可以写成-h

!是逻辑否定运算符,-a是逻辑"和"。

所以这个:

if [ -d "directory name" -a ! -L "directory name" ]; then

表示"如果无论是什么目录而且不是符号链接"。 (如果目标是指向目录的符号链接,则-d将返回true。

[语法实际上是test命令的同义词。您系统上的man testinfo test应该向您显示文档。 [也是bash中的内置命令,因此info bash也会向您显示文档;搜索

`test'

答案 1 :(得分:1)

  • -d是"目录存在,"但你似乎知道这一点。
  • -a是"逻辑和。"
  • !是"表达式为false"
  • -L是"文件存在且是符号链接(与-h相同)"

所以在英语中这将是

如果"目录名称"存在并且是目录"目录名称"存在且是一个symobolic链接,然后......

您需要的文档是man test

答案 2 :(得分:0)

我相信第二部分是:

...和(-a)"目录名称"不是(!)符号链接(-L)

答案 3 :(得分:0)

-a是POSIX标准版test的扩展,用作布尔AND运算符。 standard本身(请参阅“应用程序使用”部分)不鼓励使用常规shell test运算符来支持两个单独的&&命令。

if [ -d "directory name" ] && [ ! -L "directory name" ]; then
    # do something
fi

链接页面还定义了-d!-L运营商:

  • -d 路径名 如果pathname解析为目录的现有目录条目,则为True。如果无法解析路径名,或者路径名解析为不是目录的文件的现有目录条目,则返回false。

  • 表达 如果表达式为false,则为True。如果表达式为真,则返回false。

  • -L 路径名 如果pathname解析为符号链接的现有目录条目,则为True。如果无法解析路径名,或者路径名解析为不是符号链接的文件的现有目录条目,则返回false。如果pathname的最后一个组件是符号链接,则不会遵循该符号链接。

答案 4 :(得分:-1)

  • [ -d FILE ] - 如果FILE存在且为目录,则为真。
  • [ -a File] - 如果存在FILE,则为真。
  • [ -L FILE ] - 如果FILE存在且为符号链接,则为真。
  • [ ! EXPR ] - 如果EXPR为假,则为真。