我正在使用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
答案 0 :(得分:2)
更正if
语法:
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
答案 1 :(得分:2)
语法不正确:
if [[ $(ls /path/to/dir1 | wc -l) != 20 || $(ls /path/to/dir2 | wc -l) != 50 ]]
then
echo "do this!"
else
echo "do that!"
fi
(为了便于阅读,我移动then
的位置)
使用两个方括号[[
,您可以使用||
代替-o
代替[[
,这更接近传统语言。严格来说,((
执行模式匹配,因此尽管上面的代码可行,但算术测试应该真正使用if (( $(ls /path/to/dir1 | wc -l) != 20 || $(ls /path/to/dir2 | wc -l) != 50 ))
then
echo "do this!"
else
echo "do that!"
fi
:
$( )
data.table
运行子shell并捕获输出。