![如何使用 bash 脚本检查是否安装了两个或多个程序?](https://linux22.com/image/981670/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20bash%20%E8%84%9A%E6%9C%AC%E6%A3%80%E6%9F%A5%E6%98%AF%E5%90%A6%E5%AE%89%E8%A3%85%E4%BA%86%E4%B8%A4%E4%B8%AA%E6%88%96%E5%A4%9A%E4%B8%AA%E7%A8%8B%E5%BA%8F%EF%BC%9F.png)
我想使用 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[@]}"