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

  • 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
    if [ have_apache2 = 1 ]
        then
           echo "Hat Apache2"
        else
           echo "Hat nicht Apache2"
        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
    package_name=nginx
    (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
    if ! dpkg-query -W -f='${Status}' apache2  | grep "ok installed"; then apt install apache2; fi

    Det blæser en halv pelikan.

    I may look calm. But inside my mind I have killed you 20 times in 5 minutes in 20 different ways.


  • Code
    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
    if ! dpkg-query -W -f='${Status}' dovecot-core  | grep "ok installed"; then 
                echo "NICHT installiert"; 
            else
                echo "Installiert";        
            fi


    Der Output ist

    Code
    install ok installed
    Installiert
    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
    if ! dpkg-query -W -f='${Status}' dovecot-core  | grep "ok installed" > /dev/null; then 
                echo "NICHT installiert"; 
            else
                echo "Installiert";        
            fi

    Det blæser en halv pelikan.

    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.

    • Offizieller Beitrag

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




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

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


    „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.

  • Code
    if ! dpkg-query -W -f='${Status}' dovecot-core >/dev/null 2>&1  | grep "ok installed"; 
            then 
                echo "NICHT installiert"; 
            else
                echo "Installiert";        
            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.