[bash] prüfen ob Befehl ausgeführt worden ist

  • Hallo,

    ich versuche mich in der Shellprogrammierung unter der bash.

    Ich mounte aktuell so meinen Passwortsafe:

    Code
     #!/bin/bash
     echo -n "Gocryptfs "
     gocryptfs -idle 30s /home/joe/.safe/ /home/joe/safe-offen/

    Jetzt bekomme ich keine Rückmeldung wenn ich mein Passwort falsch eingebe.

    Das würde ich geren überprüfen, also wenn ein falsches Passwort eingegeben wird das es zu einer AUsgabe kommt wie "Passwort falsch".

    Ich kenne denb test-befehl unter der bash, bekomme es aber nicht hin diese Prüfung zu machen.

    Es heisst so:

    Code
    Das Kommando test liefert die Möglichkeit verschiedenste Bedingungen zu testen. Deren 
    Ergebnis wird als entsprechender Rückgabewert an das Skript zurückgegeben und kann dann 
    ausgewertet werden.
    
    test ausdruck  
    [ ausdruck ]

    Nur wie stelle ich das an? Oder ist der Test Befehl hier falsch gedacht?

  • Ein Script gibt immer einen Exit-Code zurück, den Du mit $? auslesen kannst.

    Mit echo $? direkt nach Deinem Script kannst Du also sehen, was für ein Rückgabewert es liefert und das dann weiter verarbeiten.

    Ich selber nutze diese Rückgabewerte nicht so intensiv, aber eventuell hilft Dir das hier weiter:

    exit › Wiki › ubuntuusers.de

    And still, we will be here, standing like statues.

    Schinder und Knarren, statt Kinder und Narren...

    Alles ist so unsagbar schnell geworden.
    (EROC, Let's Gläntz)

    Vertrauen muss verdient werden. Man verschenkt es nicht.

    Ich stelle keine dummen Fragen. Du musst Dich mit Deinen Antworten schon ein bisschen anstrengen.

  • Zumindest gibt es den exit code "password incorrect".

    gocryptfs(1) — gocryptfs — Debian bullseye — Debian Manpages

  • Zumindest gibt es den exit code "password incorrect".

    https://manpages.debian.org/bullseye/gocry…html#EXIT_CODES

    Code
    EXIT CODES
    
    12: password incorrect

    Na, immerhin. Mich ereilt dieser Fehler auch noch ab und zu, wegen: NumLock, CAPS, oder anderer Tastaturbelegung, natürlich auch wegen zu schnellem tippen....

    And still, we will be here, standing like statues.

    Schinder und Knarren, statt Kinder und Narren...

    Alles ist so unsagbar schnell geworden.
    (EROC, Let's Gläntz)

    Vertrauen muss verdient werden. Man verschenkt es nicht.

    Ich stelle keine dummen Fragen. Du musst Dich mit Deinen Antworten schon ein bisschen anstrengen.

  • So in etwa könnte es aussehen (ungetestet).

  • Vielen Dank für die Tipps :)

    Ich will noch die Eingabe ohne Passwort mit abfangen, also wenn nur Return gedrückt wird und insgesamt 3 Versuche dann ist Schluss. Dachte da an ein oder ( || ) in der IF Anweisung in der for-Schleife, aber das funktioniert nicht.

    Habe da wohl ein Denkfehler.

    So sieht das bei mir aus:

    Code
    for i in 1 2 3
        do
        echo -n "Gocryptfs "
        gocryptfs -q -idle 30s /home/joe/.safe/ /home/joe/safe-offen/
    
        if [ $? -eq 12 ] || [ $? -eq 22 ]; then
            echo -n "$i"er" Versuch von 3 --> "
        fi
    done
  • Als Exit Code bei fehlender Eingabe wird die 9 ausgeworfen, 12 bei falscher Eingabe.

  • Ich bin von Exit Code 22 ausgegangen wie es in der Man Page steht die verlinkt wurde.

    Das bezieht sich wohl nur auf die Ersteinrichtung 22: password is empty (on “-init”).

    Hatte dein Script soweit abgeändert, dass der Exit Code angezeigt wird. Und da kam halt bei Nichteingabe die 9 raus. :)

    Bash
    #!/bin/bash
    
    gocryptfs crypt/ uncrypt/
    
    # Ausgabe des Exit Codes
    echo $?

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!