Wie kann ich ein Bash-Skript erstellen, das überprüft, ob ein Programm bereits installiert ist, und wenn nicht, installiert es es?
Danke für Ihre Hilfe.
Hier ist der Code, den ich bisher habe:
#/bin/bash
PS3="choose an option"
select opcion in "Installing_Youtube" "exit"
do
case $opcion in
"Installing_Youtube")
youtube-dl > /usr/bin
if [ $? -eq 127 ] ; then
echo "installing youtube"
apt-get update
apt-get install youtube-dl
mkdir Videos
else
echo "Youtube already installed"
fi
;;
"exit")
exit
/usr/bin
?apt-mark showmanual
dann mit so etwas installierenapt-get install "$(< package.list)"
.Antworten:
du kannst das:
dpkg -s <packagename> &> /dev/null
Überprüfen Sie dann den Exit-Status. Nur wenn der Exit-Status des obigen Befehls gleich
0
dem installierten Paket war .damit:
quelle
sudo apt install $name
? Der Befehl muss in die nächste Zeile gehen ... Ansonsten gute Arbeit ...dpkg
nur für installierte Debian-Pakete relevant ist. Im speziellen Fall von OPyoutube-dl
könnte zum Beispiel auch über Pythons Paketmanagerpip
if dpkg -s “$name” &> /dev/null ; then
? Gleicher Effekt, sauberer / klarer imo.if
tut ...Hier ist eine Funktion, die ich für den Zweck geschrieben habe, den ich in meinen Skripten verwende. Es prüft, ob das erforderliche Paket installiert ist, und fordert den Benutzer auf, es zu installieren, wenn dies nicht der Fall ist. Es erfordert einen Paketnamen als Parameter. Wenn Sie den Namen des Pakets nicht kennen, zu dem ein erforderliches Programm gehört, können Sie es nachschlagen. Informationen dazu finden Sie hier.
quelle
Diese Befehlszeile überprüft das
which
Programm und kehrt zurück,0
wenn es installiert ist und1
wenn nicht:Natürlich werden Sie es in Ihrem Skript folgendermaßen verwenden:
Eine einfache Verwendung wäre:
Beachten Sie mehrere Dinge:
quelle
which
ist super nicht tragbar. Ich benutzecommand -v
stattdessen häufig , aber es hängt stark von der Art des Namens ab, den Sie suchen (Alias, Funktion, ausführbare DateiUnix & Linux
Seite! Wenn ich es vorUnix & Linux
Ort beantworten würde, wäre das eine andere Sache!Warum möchten Sie es überhaupt überprüfen? Wenn Sie keinen guten Grund dafür haben, tun Sie es nicht, nur
apt-get install package
vorbei. Wenn es bereits installiert ist, wird es aktualisiert, wenn eine neuere Version verfügbar ist. Wenn es installiert ist und auf dem neuesten Stand ist, passiert nichts. Für den Fall, dass eine Konfiguration angewendet werden muss, gibt es andere Optionen, z. B. das Erstellen eines Konfigurationspakets, das vom Paket abhängt, oder die Verwendung einer Konfigurationsverwaltungssoftware wie ansible.quelle
Eine einfache Möglichkeit, nach installierten Paketen zu suchen, indem Sie
apt-mark
:apt-mark showinstall
listet alle Pakete auf, die als installiert markiert sind (bereits installiert oder zur Installation in die Warteschlange gestellt). Danach müssen Sie nur noch die Pakete durchsuchen, die Ihnen wichtig sind.Beispiel:
apt-mark showinstall | grep -q "^$PACKAGE_NAME$" && echo "installed" || echo "not"
quelle