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

问题描述 投票:0回答:2

我正在使用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
bash if-statement command
2个回答
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

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


2
投票

正确的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
© www.soinside.com 2019 - 2024. All rights reserved.