Bash 执行命令并在if语句中进行比较
我使用bash脚本检查两个特定目录是否包含特定数量的文件。假设20。可以在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
#!/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
?