如何测试软件包是否已安装?

我想要一个shell脚本的方法来测试/报告一个软件包是否已安装。我不需要详细信息,只需要一个是/否的答案。
我已经想出了这种方法。是否有更直接的方式?
is_installed=0
test_installed=( `apt-cache policy domy-ce | grep Installed: ` )
[ ! "${test_installed[1]}" == "(none)" ] && is_installed=1

1这篇帖子应该能帮到你: http://stackoverflow.com/questions/1298066/check-if-a-package-is-installed-and-then-install-it-if-its-not - saji89
感谢saji89。明显的重复项在Debian注册的软件包中提供准确的结果,但在Ubuntu PPA软件包中的结果不可靠。对于在主机上注册但未安装的软件包,dpkg的返回代码是零[0]。 - tahoar
1个回答

你可以在你的脚本中使用以下命令输出: dpkg -s <packagename> 或者 dpkg-query -l <packagename> 这是为了检查软件包是否已安装。
参考链接:https://stackoverflow.com/questions/1298066/check-if-a-package-is-installed-and-then-install-it-if-its-not 例如:
#!/bin/sh

for P; do
    dpkg -s "$P" >/dev/null 2>&1 && {
        echo "$P is installed."
    } || {
        echo "$P is not installed."
    }
done

用法:`script.sh package1 package2 .... packageN`

Courtesy:https://stackoverflow.com/a/10594734/749232


1如果一个软件包被安装后又被移除,那么dpkg -s命令仍然会返回0状态!请参考http://askubuntu.com/a/395278/165556。 - 200_success