Forum: PC-Programmierung Schleife substring in string


von Pascal S. (pascal_s976)


Lesenswert?

Ich steh grad ein wenig auf dem Schlauch. Gegeben ist eine Variable 
$APT_PKG welche mehrere substrings (Apt Pakete) enthalten kann. Nun 
möchte ich mit einer Schleife testen ob die einzelnen Pakete bereits auf 
dem System installiert sind und mit apt-get install nur diejenigen 
aufrufen welche noch nicht installiert sind.

Den folgenden Code habe ich bereits, welcher funktioniert wenn die 
Variable nur ein Paket enthält:
1
#!/bin/sh
2
APT_PKG="zsh"
3
if [ $(dpkg-query -W -f='${Status}' $APT_PKG 2>/dev/null | grep -c "ok installed") -eq 0 ]; then
4
    apt-get -q -y install $APT_PKG && echo "Installed Packages: $APT_PKG"
5
else
6
    echo "Package $APT_PKG already installed"
7
fi
Was mir fehlt ist die Schleife um die in Variable $APT_PKG enhaltenen 
substrings zu zerlegen in zu installieren und bereits installiert.

von Pascal S. (pascal_s976)


Lesenswert?

Ich antworte mal selber Ich habe viel zu weit gesucht.
1
for a in $APT_PKG; do
2
   echo ${a}
3
done
Ich mach mal mein Schnipsel fertig und poste es gleich noch.

von Pascal S. (pascal_s976)


Lesenswert?

Nun meine Lösung
1
#!/bin/sh
2
APT_PKG="zsh vim tmux fonts-powerline test"
3
for a in $APT_PKG; do
4
    if [ $(dpkg-query -W -f='${Status}' ${a} 2>/dev/null | grep -c "ok installed") -eq 1 ]; then
5
       echo "${a} is installed"
6
    else
7
       if apt-cache show "${a}" 1>/dev/null 2>&1; then
8
          echo "Install ${a}"
9
       else
10
          echo "${a} not available"
11
       fi
12
    fi
13
done
Selbstverständlich aus Schnipseln zusammengesucht. ;-)

von Rolf M. (rmagnus)


Lesenswert?

Wozu machst du das eigentlich? Wenn man mit apt ein Paket installieren 
will, das schon installiert ist, meldet es das doch schon. Das einzige 
wäre, wenn das Paket zwar installiert, aber veraltet ist, dass apt es 
dann auf den neuesten Stand hochzieht, aber will man das nicht sowieso?

von Oliver S. (oliverso)


Lesenswert?

Pascal S. schrieb:
> dem System installiert sind und mit apt-get install nur diejenigen
> aufrufen welche noch nicht installiert sind.

--no-upgrade

Oliver

von Pascal S. (pascal_s976)


Angehängte Dateien:

Lesenswert?

Dies ist nur ein Teil eines Scriptes der es ermöglichen soll meine Linux 
Systeme zu konfigurieren und zu aktualisieren.
Das sieht dann wie in den Anhängen aus. Das ganze Script befindet sich 
hier:

https://gitlab.com/pascalep/home-network-setup-and-configuration

Ich bitte um Nachsicht, das ganze ist noch sehr Work in progress und ich 
bin Anfänger sowohl mit Shellscript wie auch mit Git.

von Sheeva P. (sheevaplug)


Lesenswert?

Pascal S. schrieb:
> Dies ist nur ein Teil eines Scriptes der es ermöglichen soll meine Linux
> Systeme zu konfigurieren und zu aktualisieren.
> Das sieht dann wie in den Anhängen aus. Das ganze Script befindet sich
> hier:
>
> https://gitlab.com/pascalep/home-network-setup-and-configuration
>
> Ich bitte um Nachsicht, das ganze ist noch sehr Work in progress und ich
> bin Anfänger sowohl mit Shellscript wie auch mit Git.

Bitte entschuldige, das ist bestimmt ein spannendes Projekt, aber warum 
entwickelst Du so etwas selbst? Dafür gibt es doch fertige, etablierte, 
getestete und sehr stabile Software -- wie zum Beispiel Ansible.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.