说到 bash,我是个新手。我正在尝试创建一个脚本来检查软件包是否已安装。如果没有,它将安装该软件包。不确定我在做什么。
#! /bin/bash
echo Installing/Checking packages from list
declare -a PKGS=("libreoffice", "firefox", "virtualbox", "vlc")
PKG_OK=$(dpkg-i -W --showformat='${Status}\n' PKGS |grep "install ok installed")
for i in "${PKGS[@]}"
do
if [ "" = "$PKG_OK" ]; then
echo "No $PKGS, installing the package now"
sudo apt install $PKGS[@]
fi
done
答案1
简单地:
#!/bin/bash
pkgs=(libreoffice firefox virtualbox vlc)
sudo apt-get -y --ignore-missing install "${pkgs[@]}"
- 已经安装的软件包将被自动忽略
- 那些不可访问的也将被忽略
--ignore-missing
- 比编写脚本
apt-get
更喜欢apt
从man apt
:
apt 为包管理系统提供了一个高级命令行界面。它旨在作为最终用户界面,并且与 apt-get(8) 等更专业的 APT 工具相比,默认情况下启用一些更适合交互式使用的选项
我个人使用的另一种方法是将所有需要的包添加到文件中逐行:
packages.list
:
moreutils
util-linux
strace
然后我可以打电话:
apt-get -y --ignore-missing install $(< packages.list)
答案2
我也是 shell 脚本的菜鸟,老实说,我不知道你的方法,但这就是我会做的。
#!/usr/bin/env bash
declare -a PKGS=(libreoffice firefox virtualbox vlc)
for i in "${PKGS[@]}"; do
check=$(command -v "$i")
if [[ $? -ne 0 ]]; then
sudo apt install "$i"
fi
done