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

时间:2017-12-21 15:44:12

标签: 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

2 个答案:

答案 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并捕获输出。