per Shell-Script Programm starten und Rückgabewert auswerten



  • Hi,

    ich arbeite mich in letzter Zeit durch ein C-Anfänger-Buch und versuche gerade ein Beispiel umzusetzen, in welchem ein kompiliertes C-Programm mittels Shell-Script ausgeführt und ausgewertet werden soll.

    Das C-Programm:

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(void) {
        int i, j;
    
        printf("Zahl eingeben: ");
        j = scanf("%i", &i);
    
        // 1 = korrekte eingabe
        if (j != 1) {
            printf("Fehler bei Eingabe!\n");
            return EXIT_FAILURE;
        }
    
        if (i < 0) {
            printf("Negative Zahlen nicht zugelassen!\n");
            return EXIT_FAILURE;
        }
    
        return EXIT_SUCCESS;
    }
    

    Dies wird zur ausfürhbaren Datei test kompiliert. Und nun das Shell-\1:

    # Datei: check.sh
    # programm starten
    # hier handelt es sich um die kompilierte test.c
    ./test
    
    # rückgabewert des programms in ret speichern
    ret=$?
    
    if [ ret -eq 0 ]
    then
        echo "Alles Ok: Rückgabewert war 0"
    fi
    
    if [ ret -eq 1 ]
    then
        echo "Fehler: Rückgabewert war 1"
    fi
    

    Führe ich das Shell-Script aus, meldet mir die Shell:

    ./check.sh: Zeile 4: [: ret: Ganzzahliger Ausdruck erwartet.
    ./check.sh: Zeile 9: [: ret: Ganzzahliger Ausdruck erwartet.

    Ich verstehe das Problem nicht. Die EXIT_*-Makros repräsentieren doch einen Integer - der Rückgabewert des C-Programms sollte daher korrekt sein, oder? Muss also wohl am Shell-Script liegen? Im Buch steht, dass der Rückgabewert des zuletzt ausgeführten Programms in der Shell-Variable $? gespeichert wird. Stimmt das?



  • Wie du schon bemerkt hast, hat das nichts mit C zu tun, daher falsches Unterforum. 😞

    Leider schreibst du auch nicht, welche shell du nutzt.

    Aber probier es mal mit $ret (mit dem $ davor) in bei den if-Abfragen.



  • DirkB schrieb:

    Leider schreibst du auch nicht, welche shell du nutzt.

    Linux-Shell.

    Aber probier es mal mit $ret (mit dem $ davor) in bei den if-Abfragen.

    Fehlermeldung erhalte ich nun keine mehr, allerdings greift immer die erste if-Bedingung im Shell-Script, auch wenn das (C-)Programm mit einem Fehler beendet wird.



  • T!P-TOP schrieb:

    Linux-Shell.

    Such dir eine aus: http://de.wikipedia.org/wiki/Unix-Shell
    Da kannst du auch nochmal unter den Weblinks in das Wikibook schauen.

    T!P-TOP schrieb:

    Fehlermeldung erhalte ich nun keine mehr, allerdings greift immer die erste if-Bedingung im Shell-Script, auch wenn das (C-)Programm mit einem Fehler beendet wird.

    Dazu müsste noch je ein Semikolon nach den ] stehen.

    Denn eigentlich brauchst du das ret nicht:

    #!/bin/sh
    # Datei: check.sh
    # programm starten
    
    if ./test;
    then
        echo "Alles Ok: Rückgabewert war 0"
    else
        echo "Fehler: Rückgabewert ungleich 0"
    fi
    

    Ungetestet!



  • Nun läuft alles korrekt. Das Linux-Kompendium werde ich mir jetzt auch mal zu Gemüte führen 🙂

    Vielen Dank für deine Hilfe.



  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum C (C89 und C99) in das Forum Linux/Unix verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten