如何使用 bash 脚本检查是否安装了两个或多个程序?

如何使用 bash 脚本检查是否安装了两个或多个程序?

我想使用 bash 脚本检查是否安装了两个或更多程序:

hash foo &> /dev/null
if [ $? -eq 1 ]; then
    echo >&2 "foo not found."
else
    echo "foo found"
fi

上述脚本适用于单个程序,但我想检查系统中安装的多个程序。我该怎么做?

答案1

如果你想检查一下全部安装完成后,只需执行以下操作:

hash foo bar baz &>/dev/null && 
    echo "All programs installed" ||
    echo "At least one program is missing"

&>标准错误和标准输出重定向到,/dev/null这样您就不会打印输出hash。您可能只需要2>因为据我所知,hash只打印到stderr,但我们最好还是谨慎一点。

&&意味着只有前一个命令成功后才会运行下一个命令。这||意味着只有前一个命令失败后才会运行下一个命令。因此,如果您检查的三个(或 N 个)程序中有一个未安装,您将收到错误消息。

如果您想知道哪个程序未安装,请使用这个:

for p in foo bar baz; do 
    hash "$p" &>/dev/null && echo "$p is installed" ||
                 echo "$p is not installed"
done 

最后,为了获得更细粒度的控制和详细的输出,您可以执行以下操作:

i=0; n=0; progs=(foo bar baz);
for p in "${progs[@]}"; do
    if hash "$p" &>/dev/null
    then
        echo "$p is installed"
        let c++
    else
        echo "$p is not installed"
        let n++
    fi
done
printf "%d of %d programs were installed.\n"  "$i" "${#progs[@]}" 
printf "%d of %d programs were missing\n" "$n" "${#progs[@]}"

相关内容