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.