PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Shellscript mit Rückgabewert



Thomas220
28.01.19, 14:16
Hallo zusammen,

ich habe auf meinem SuSE Linux System mehrere Shellscripte, die Montags bis Sonnabends (Samstag) per Cronjob laufen.
Sie laufen auch an Feiertagen. Das möchte ich verhindern.
Das Feiertagsberechnungsprogramm ist fertig.
Ich rufe also dieses Programm aus einem anderen mittels

sh feiertage.sh
auf. Nun möchte ich aber, dass das Feiertagsberechnungsprogramm in meine startendes Programm eine Wert zurückgibt, ob heute ein Feiertag ist oder nicht.
Im Feiertagsberechnungsprogramm habe ich noch folgende Zeilen:

then
87 echo -e "\033[32mheute ist ein Feiertag \033[0m" # JA --> Aktion ausführen (gruene Schrift)
88 ft=1
89 else
90 echo -e "\033[35mheute ist kein Feiertag \033[0m" # NEIN --> Aktion ausführen (magenta Schrift)
91 ft=0

Ist heute ein Feiertag, dann ft=1, ist keiner, dann ft=0.
Wie bekomme ich aber den Wert dieser Variable in mein aufrufendes Programm zurück?

Hoffe, habe mich einigermaßen verständlich ausgedrückt.

Danke
Thomas

fork
28.01.19, 14:25
Die Variable bekommst Du aus einer Subshell nicht zurück, aber einen Exit-Code(Exit Code darf eine Ganzzahl sein von 0-255). Ansonsten kannst Du die Ausgabe auch in eine Variable packen.

a) mit exit-code



#!/bin/bash
#
# mein tolles programm: toll.sh
#
#
#
feiertag=0

exit $feiertag


Aufrufendes programm


#!/bin/bash

toll.sh
feiertag_aufrufend=$?

echo $feiertag_aufrufend


a) Per Ausgabe in Variable packen:



#!/bin/bash
#
# mein tolles programm: toll.sh
#
#
#
feiertag=ja

echo $feiertag


Aufrufendes programm


#!/bin/bash

feiertag_aufrufend="$(toll.sh)"

echo $feiertag_aufrufend

Thomas220
28.01.19, 14:32
:)
Hallo fork,
vielen Dank für die schnelle Hilfe.
Klappt.
Das mit dem $? hatte ich schon gesehen, dachte aber, dass das Fragezeichen ein Platzhalter für irgendeine einzusetzende Variable sei und nicht die Variable aus "toll.sh" selbst.

Thomas

nopes
28.01.19, 15:35
Bin ein bisschen am 0-255 hängen geblieben, aber wie immer rtfm :)

Also wer sich über den komischen Wertebereich wunder (int idR 32 Bits und kann auch negativ werden), dem wird hier geholfen: http://pubs.opengroup.org/onlinepubs/9699919799/functions/exit.html

$? wird da ebenfalls erklärt, aber ein anderer Abschnitt:
2.1 Shell Introduction - POSIX Shell (das muss jede Shell können, egal ob BASH, SH, CSH, ZSH) http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_01

Für $?:
2.5.2 Special Parameters - legt fest was es mit ? aufsich hat http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_05_02
2.6.2 Parameter Expansion - legt fest was es mit $? aufsich hat http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_02

drcux
28.01.19, 20:09
0-255 -> 32 Bits

Ich brauche dafür nur 8 Bit, und negativ ist das Ergebnis wohl auch nie.... :-)

Oder habe ich dich jetzt falsch verstanden?

nopes
28.01.19, 21:44
Ja eben, es ist aber doch int main und nicht char main bzw unsigned char main. Der Bereich für int variiert zwar, ist aber größer als 0-255. Passt aber, mir war nur nicht klar, dass der Wert mit 0xFF verundet wird, was es ja erzwingt ;)

[edit]Wegen dieser int Thematik war ich drüber gestolpert, hatte ich halt nicht auf den Zettel. Code wie dieser ist ja nicht unüblich:
int main(){/*...*/return -1;}