• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Suse11 - "exit 1" im Script

Rumak18

Member
Hallo,
ich habe mir ein einfaches Script geschrieben:
Code:
#!/bin/bash
[ $1 == "" ] && exit 1
MAILADDRESSE=$1
`echo -n $MAILADDRESSE | grep @`
RET=$?
if [ $RET -ne 0 ]; then
        echo "Die Eingabe beinhaltet keine korrekte E-Mail Adresse!"
        exit 1
fi

Das Problem an dem Code ist, dass wenn ich es aufrufe mit ". Script Mailadresse" meine "putty" Konsole sofort beendet wird und ich nicht wirklich weiß, wieso. Ich meine, dass das "exit 1" ja nur das Script verlassen sollte und nicht meine Konsole schließen. Weiß Jemand Rat?
 
A

Anonymous

Gast
Rumak18 schrieb:
Das Problem an dem Code ist, dass wenn ich es aufrufe mit ". Script Mailadresse" meine "putty" Konsole sofort beendet wird und ich nicht wirklich weiß, wieso. Ich meine, dass das "exit 1" ja nur das Script verlassen sollte und nicht meine Konsole schließen. Weiß Jemand Rat?

Wenn du das Script so aufrufst dann wird es in der aktuellen Shell ausgeführt aus der du es aufrufst, und somit greift das exit auf die aktuelle Shell.

Entweder das Script anders aufrufen, damit es in einer Subshell gestartet wird, oder wenn du unbedingt das Script includen willst, dann dort mit einer Funktion und mit einem Rückgabewert der Funktion und nicht mit return arbeiten.

robi
 
OP
R

Rumak18

Member
Danke.
Habe es nun so versucht
Code:
"Script Mailadresse"
Leider erhalte ich dann den Fehler:

Code:
/usr/local/bin/script.sh: line 5: test@domain: command not found
Die Eingabe beinhaltet keine korrekte E-Mail Adresse!

Wieso hat er in der fünften Zeile ein Problem?
 
A

Anonymous

Gast
Rumak18 schrieb:
Wieso hat er in der fünften Zeile ein Problem?

ganz einfach, weil du dort eine Komandosubstution machst und versuchtst das was als Ergebnis hinter der Pipe mit grep herauskommt, als Befehl auszuführen.
versuch das mal so hier
Code:
echo -n $MAILADDRESSE | grep @ > /dev/null

robi
 
OP
R

Rumak18

Member
SUPER! Hat funktioniert. Was ich aber nicht ganz verstehe, wenn ich das Ergebnis, also stdout an /dev/null hänge und somit sozusagen wegschmeiße , dann sollte doch die weitere Verarbeitung des Ergebnisses von grep gar nicht möglich sein bzw der Returncode IMMER "0" (Null) sein oder?
 

RME

Advanced Hacker
Hallo,

Du verwechselst "EXIT STATUS" (= 0, 1 oder >1) mit "STDOUT" (= das eigentliche Resultat der Suche).

Gruss,
Roland
 

RME

Advanced Hacker
Hallo,

-1- copy/paste das folgende Script (nenne die Datei z.B. "test_script")

-2- mach dieses ausführbar (chmod)

-3- Script ausführen und Ausgabe vergleichen:

Code:
./test_script string pattern
zum Beispiel:

Code:
./test_script abcdef xxx

./test_script abcdef cd

Script code:

Code:
#!/bin/bash
#

string=$1
pattern=$2

echo
echo string  = $1
echo pattern = $2
echo

echo "--- grep Ausgabe im Terminal ---"
echo -n $string | grep --color $pattern > /dev/tty
ret=$?
echo "function_return = $ret"
echo

echo "--- grep Ausgabe umgeleitet auf /dev/null ---"
echo -n $string | grep --color $pattern > /dev/null
ret=$?
echo "function_return = $ret"
echo

echo "--- function_return test (if then else) ---"
if [ $ret -ne 0 ]; then
  echo "pattern nicht gefunden."
else
  echo "pattern gefunden."
fi
echo

# --end of script--

Beispiel:

Code:
> ./test_script abcdefg xxx

string = abcdefg
pattern = xxx

--- grep Ausgabe im Terminal ---
function_return = 1

--- grep Ausgabe umgeleitet auf /dev/null ---
function_return = 1

--- function_return test (if then else) ---
pattern nicht gefunden.

Code:
> ./test_script abcdefg cde

string = abcdefg
pattern = cde

--- grep Ausgabe im Terminal ---
abcdefg
function_return = 0

--- grep Ausgabe umgeleitet auf /dev/null ---
function_return = 0

--- function_return test (if then else) ---
pattern gefunden.

>
Gruss,
Roland
 
Oben