我正在使用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) != 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
$( )
运行子shell并捕获输出。
正确的if
语法:
if [ $(ls /path/to/dir1 | wc -l) -ne 20 -o $(ls /path/to/dir2 | wc -l) -ne 50 ]
但在你的例子中,你不应该只使用elif
。使用else
,或指定elif
的条件,exmpl:
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