我想写一个安装 bash 脚本,我想在其中安装 MySQL 服务器。
在 Linux Mint 上,我遵循了以下代码:
apt-get -y --force-yes install mysql-server-5.6
Run Code Online (Sandbox Code Playgroud)
但是我安装了新的 Debian 8 并且没有mysql-server- 而是有mariadb.
如何确定包是否存在?
我只知道有dpkg -s哪个应该告诉是否安装了一个包。
EEA*_*EAA 15
(以下来自 Ubuntu,但同样的技术显然也适用于 Debian)
$ apt-cache show screen
Package: screen
Priority: optional
Section: misc
Installed-Size: 950
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Axel Beckert <abe@debian.org>
Architecture: amd64
Version: 4.1.0~20120320gitdb59704-9
Depends: libc6 (>= 2.15), libpam0g (>= 0.99.7.1), libtinfo5
Suggests: iselect (>= 1.4.0-1) | screenie | byobu
Filename: pool/main/s/screen/screen_4.1.0~20120320gitdb59704-9_amd64.deb
Size: 645730
...
Run Code Online (Sandbox Code Playgroud)
如果包存在,将显示信息。如果没有,你会看到类似的东西:
$ apt-cache show foobar
N: Unable to locate package foobar
E: No packages found
Run Code Online (Sandbox Code Playgroud)
此外,apt-cache如果没有找到匹配的包, 的退出代码将为非零。
附加说明:如果您使用apt-cache show packagewhere 包是一个虚拟包(一个不存在的包,但例如被其他包引用),您将获得:
N: Can't select versions from package 'package' as it is purely virtual
N: No packages found
Run Code Online (Sandbox Code Playgroud)
在exit code这种为零(这是一个有点在我看来误导。)
我会使用dpkg -l mysql-server &> /dev/null && echo "mysql-server is installed".
它将检查mysql-server包是否已安装,如果已安装,则将此事实打印到屏幕上。一个更复杂的解决方案是,在 bash 中(未经测试):
function package_exists() {
return dpkg -l "$1" &> /dev/null
}
Run Code Online (Sandbox Code Playgroud)
因此可以在脚本中执行以下操作:
if ! package_exists mysql-server ; then
echo ”Please install mysql-server!"
fi
Run Code Online (Sandbox Code Playgroud)