我使用安装脚本,这是我的两个安装命令:
function InstallChrome()
{
if ( which google-chrome 1>/dev/null ); then
echo "Chrome is installed"
return
fi
echo "Installing Google Chrome ..."
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb -O chrome
sudo dpkg -i chrome
echo "Installed Google Chrome"
}
所以基本上我会搜索安装的程序apt
,如果它存在,我不会运行命令apt
。
原因是它比让apt
支票快得多。
然而,这段代码不起作用:
function InstallSshServer()
{
if ( which openssh-server 1>/dev/null ); then
echo "SSH Server is installed"
return;
fi
echo "Installing SSH Server ..."
sudo apt install openssh-server -y
echo "Installed SSH Server"
}
openssh-server
我的机器上安装的程序的名称是什么?如何检查它是否已经安装?
答案1
openssh-server
安装/usr/sbin/sshd
,你应该寻找它。软件包不一定会安装同名的二进制文件,并且它们安装的二进制文件不一定位于所有用户的路径上。因此,明确地:
[ -x /usr/bin/sshd ] || sudo apt install -y openssh-server
dpkg -L
如果安装了某个包,将告诉您该包安装了哪些文件。可以使用以下命令列出二进制文件:
dpkg -L openssh-server | grep bin/
apt-file list
将显示包安装的文件,而无需先安装它。
作为旁白,为什么不用“哪个”呢?那该用什么呢?将为您的脚本提供有用的阅读。
答案2
我会用什么做巴什:
if ! type -p sshd &>/dev/null; then
sudo apt-get install -y openssh-server
fi
答案3
这是我为类似案例编写的一个小脚本的改编版:
#!/bin/bash
prompt_confirm() {
while true; do
read -r -n 1 -p "${1:-} [y/n]: " REPLY
case ${REPLY} in
[yY]) echo ; return 0 ;;
[nN]) echo ; return 1 ;;
*) printf " \033[31m %s \n\033[0m" "Incorrect input, please type y (yes) ou n (no)."
esac
done
}
# Check if openssh-server is installed
if ! command -v sshd &> /dev/null
then
echo -e "\nThe openssh-server is not installed."
if prompt_confirm "Would you like to install it now?";
then
apt install -y openssh-server
else
echo -e "\nOk, quitting.\n"
exit
fi
fi
当然,您可以只使用检查部分,不需要提示符y/n。
command -v
是测试命令在系统上是否可用的推荐方法。