mikrocontroller.net

Forum: PC-Programmierung Schleife substring in string


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Pascal S. (pascal_s976)


Bewertung
0 lesenswert
nicht 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:
#!/bin/sh
APT_PKG="zsh"
if [ $(dpkg-query -W -f='${Status}' $APT_PKG 2>/dev/null | grep -c "ok installed") -eq 0 ]; then
    apt-get -q -y install $APT_PKG && echo "Installed Packages: $APT_PKG"
else
    echo "Package $APT_PKG already installed"
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)


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

von Pascal S. (pascal_s976)


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

von Rolf M. (rmagnus)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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:

Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.