Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 执行命令并在if语句中进行比较_Bash_If Statement_Command - Fatal编程技术网

Bash 执行命令并在if语句中进行比较

Bash 执行命令并在if语句中进行比较,bash,if-statement,command,Bash,If Statement,Command,我使用bash脚本检查两个特定目录是否包含特定数量的文件。假设20。可以在if语句中的一行中检查它吗 #!/bin/bash if [ [ls /path/to/dir1 | wc -l ] != 20 || [ ls /path/to/dir2 | wc -l ] != 50 ]; then echo "do this!" elif echo "do that!" fi 更正如果语法: if[$(ls/path/to/dir1 | wc-l)-ne 20-o$(ls/path/t

我使用bash脚本检查两个特定目录是否包含特定数量的文件。假设20。可以在if语句中的一行中检查它吗

#!/bin/bash

if [ [ls /path/to/dir1 | wc -l ] != 20 ||  [ ls /path/to/dir2 | wc -l ] != 50 ]; then
  echo "do this!"
elif
  echo "do that!"
fi

更正
如果
语法:

if[$(ls/path/to/dir1 | wc-l)-ne 20-o$(ls/path/to/dir2 | wc-l)-ne 50]

但在您的示例中,不应该只使用
elif
。使用
else
,或指定
elif
的条件,例如:

if [ $(ls /path/to/dir1 | wc -l) -ne 20 -o $(ls /path/to/dir2 | wc -l) -ne 50 ]
then
    echo "Do smth"
elif [ $(ls /path/to/dir3 | wc -l) -ne 100 ]
then
    echo "Do anything else"
fi

更正
如果
语法:

if[$(ls/path/to/dir1 | wc-l)-ne 20-o$(ls/path/to/dir2 | wc-l)-ne 50]

但在您的示例中,不应该只使用
elif
。使用
else
,或指定
elif
的条件,例如:

if [ $(ls /path/to/dir1 | wc -l) -ne 20 -o $(ls /path/to/dir2 | wc -l) -ne 50 ]
then
    echo "Do smth"
elif [ $(ls /path/to/dir3 | wc -l) -ne 100 ]
then
    echo "Do anything else"
fi

语法不正确:

if [[ $(ls /path/to/dir1 | wc -l)  != 20 || $(ls /path/to/dir2 | wc -l) != 50 ]] 
then
    echo "do this!"
else
    echo "do that!"
fi
(我移动
的位置,然后移动
,以确保可读性)

使用两个方括号
[[
可以使用
|124;
for“或”代替
-o
,后者更接近传统语言。严格地说,
[[/code>进行模式匹配,因此尽管上面的代码可以工作,但算术测试应该真正使用


$()
运行子shell并捕获输出。

语法不正确:

if [[ $(ls /path/to/dir1 | wc -l)  != 20 || $(ls /path/to/dir2 | wc -l) != 50 ]] 
then
    echo "do this!"
else
    echo "do that!"
fi
(我移动
的位置,然后移动
,以确保可读性)

使用两个方括号
[[
可以使用
|124;
for“或”代替
-o
,后者更接近传统语言。严格地说,
[[/code>进行模式匹配,因此尽管上面的代码可以工作,但算术测试应该真正使用


$()
运行子shell并捕获输出。

为什么第二个测试使用
50
而不是
20
?为什么第二个测试使用
50
而不是
20