Überprüfen, ob ein Package bereits installiert ist / Problem mit functions

Aus gegebenem Anlass: Sichert eure Backupcodes wenn ihr die Zwei-Faktor-Authentifizierung aktiviert habt!

Infos dazu findet ihr nochmal hier

  • Ich schreibe derzeit ein Shellscript, allerdings brauche ich für ein Feature die Funktion, das man überprüfen kann (Mit einer If-Anweisung), ob ein Package bereits installiert ist


    Beispiel:


    Code
    1. if [ have_apache2 = 1 ]
    2. then
    3. echo "Hat Apache2"
    4. else
    5. echo "Hat nicht Apache2"
    6. fi


    Und Problem 2 ist Functions mit Parametern


    Wie kann ich Functions mit Parametern verwenden?


    Zeigt er Command not found.


    -> Wenn ich jedoch echo davor setze, zeigt er mir nur testblock dovecot-core


    Vielleicht kann jemand mir helfen.


    palwal

    Wer PALWAL-Sternchen vergibt, bekommt aus Prinzip ein Like 😏


    palwal Donald Trump ist einer der besten Präsidenten welche die USA je hatte, meine Meinung.

  • Welche Distro willst du denn nutzen?


    Code
    1. package_name=nginx
    2. (dpkg-query -W --showformat='${Status}\n' $package_name|grep "install ok installed")

    dpkg kannst du nutzen wenn es Ubuntu/Debian based ist. Der liefert dann zurueck ob es installiert ist.

    pasted-from-clipboard.png



    Alternativ:


    Code
    1. if ! dpkg-query -W -f='${Status}' apache2 | grep "ok installed"; then apt install apache2; fi

    Ваш человек еще до того, как вы знаете, что это!
    I may look calm. But inside my mind I have killed you 20 times in 5 minutes in 20 different ways.


  • Code
    1. if ! dpkg-query -W -f='${Status}' apache2 | grep "ok installed"; then apt install apache2; fi

    So eine If-Anweisung habe ich gebraucht. Funktioniert auch. Allerdings gibt dpkg-query separat noch eine eigene Meldung, die ich weder brauche, noch möchte.


    Beispiel


    Habe es so

    Code
    1. if ! dpkg-query -W -f='${Status}' dovecot-core | grep "ok installed"; then
    2. echo "NICHT installiert";
    3. else
    4. echo "Installiert";
    5. fi


    Der Output ist

    Code
    1. install ok installed
    2. Installiert
    3. root@mail:~#


    Es soll nur mein Output angezeigt werden.


    Und Soll auf Linux Betriebsystemen laufen, dementsprechend war dein Ansatz schon richtig.

    Wer PALWAL-Sternchen vergibt, bekommt aus Prinzip ein Like 😏


    palwal Donald Trump ist einer der besten Präsidenten welche die USA je hatte, meine Meinung.

  • Naja dann musst du die halt nach /dev/null hauen.


    Code
    1. if ! dpkg-query -W -f='${Status}' dovecot-core | grep "ok installed" > /dev/null; then
    2. echo "NICHT installiert";
    3. else
    4. echo "Installiert";
    5. fi

    Ваш человек еще до того, как вы знаете, что это!
    I may look calm. But inside my mind I have killed you 20 times in 5 minutes in 20 different ways.


  • Die Meldung


    dpkg-query: no packages found matching apache2


    erscheint noch, wenn ein Paket nicht installiert ist...


    Evtl mit einer Function... Hatte mich bereits an einer Function hierfür ran getraut, allerdings funktioniert es nicht so richtig. Wenn Return von Function (Mit Parameter) leer ist, soll das Script erkennen, das es bereits installiert ist, ansonsten eben nicht. Funktionierte nicht.

    Wer PALWAL-Sternchen vergibt, bekommt aus Prinzip ein Like 😏


    palwal Donald Trump ist einer der besten Präsidenten welche die USA je hatte, meine Meinung.

  • Dann leite doch die gesamte Ausgabe um und nicht nur einen Teil davon




    Shell-Script
    1. if ! dpkg-query -W -f='${Status}' dovecot-core | grep "ok installed" >/dev/null 2>&1; then
    2. echo "NICHT installiert";
    3. else
    4. echo "Installiert";
    5. fi

    Weitere Infos zu diesem mysteriösen 2>&1: https://stackoverflow.com/ques…e-shell-what-does-21-mean


    13423


    „Nicht das, was du nicht weißt, bringt dich in Schwierigkeiten, sondern dass, was du sicher zu wissen glaubst, obwohl es gar nicht wahr ist.“
    Mark Twain

    ---
    ICH BIN NUR HIER UM LEUTE ANZUSCHREIEN

  • Das funktioniert trotzdem nicht, wenn das Package nicht installiert ist, kommt seitens dpkg-query die Meldung dpkg-query: no packages found matching [Paketname]

    Wer PALWAL-Sternchen vergibt, bekommt aus Prinzip ein Like 😏


    palwal Donald Trump ist einer der besten Präsidenten welche die USA je hatte, meine Meinung.

  • Dann setz die Umleitung einfach zum dpkg-query


    48a118a47c.png


    13423


    „Nicht das, was du nicht weißt, bringt dich in Schwierigkeiten, sondern dass, was du sicher zu wissen glaubst, obwohl es gar nicht wahr ist.“
    Mark Twain

    ---
    ICH BIN NUR HIER UM LEUTE ANZUSCHREIEN

  • Code
    1. if ! dpkg-query -W -f='${Status}' dovecot-core >/dev/null 2>&1 | grep "ok installed";
    2. then
    3. echo "NICHT installiert";
    4. else
    5. echo "Installiert";
    6. fi

    Dann zeigt er auch bei Paketen, die installiert sind "NICHT installiert" :/

    Wer PALWAL-Sternchen vergibt, bekommt aus Prinzip ein Like 😏


    palwal Donald Trump ist einer der besten Präsidenten welche die USA je hatte, meine Meinung.

    • Hilfreich

    Da bitte sehr:


    Code
    1. if ! dpkg-query -W -f='${Status}' dovecot-core 2>&1 | grep "ok installed" > /dev/null; then
    2. echo "NICHT installiert";
    3. else
    4. echo "Installiert";
    5. fi

    Ваш человек еще до того, как вы знаете, что это!
    I may look calm. But inside my mind I have killed you 20 times in 5 minutes in 20 different ways.


  • do.de - Domain-Offensive - Domains für alle und zu super Preisen