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

[solved] Bitte um Hilfe

frodoooo

Member
Hallo,

warum bekomme ich beim ausführen dieses Skriptes immer die Fehlermeldung :
mein-script: line 6: syntax error near unexpected token `fi'
mein-script: line 6: `fi'

Code:
#!/bin/bash
if [ "$1" = "users" ]; then
  cat /etc/passwd | sort
else
  if [ "$1" = "ps-root" ] then "ps -ef"
fi

Danke schon mal für eure Hilfe.
 
Du musst die zweite if-Schleife dann natürlich auch mit fi schließen.
- Eleganter ist allerdings die Variante mit elif.

Du solltest da aber noch eine else-Anweisung einbauen, für den Fall, dass keine der beiden Bedingungen zutrifft.
bzw. das ganze mit case lösen:
Code:
#!/bin/sh

case "$1" in
  users)
    cat /etc/passwd | sort;;
  ps-root)
    ps -ef;;
  *)
    echo "Unbekanntes Argument!"; exit 1;;
esac;
 
OP
F

frodoooo

Member
ok, mein Script sieht jetzt so aus

Code:
#!/bin/bash
if [ "$1" = "users" ]; then cat /etc/passwd | sort
elif [ "$1" = "ps-root" ] then "ps -ef"
fi

bekomme allerdings keine ausgabe wenn ich 'users' als parameter angebe !
Und bekomme immernoch die Meldung :

mein-script: line 6: syntax error near unexpected token `fi'
mein-script: line 6: `fi'

lasse ich das letzte 'fi' weg, bekomme ich die Meldung

./mein-script: line 4: syntax error: unexpected end of file

@b3ll3roph0n Danke für deinen Hinweis, bevor ich allerdings mit 'case' anfange möchte ich erst einmal 'else if' verstanden haben.
Ich komme danach aber gerne noch einmal auf dich zurück, wenn ich darf.
 
Semikolons beachten (vor dem zweiten then):
Am Besten du gewöhnst dir gleich an Zeilen korrekt abzuschließen :wink:
Code:
#!/bin/sh 
if [ "$1" = "users" ]; then cat /etc/passwd | sort;
 elif [ "$1" = "ps-root" ]; then ps -ef;
  else echo "Ungültiges Argument"; exit 1;
fi;
 
OP
F

frodoooo

Member
ok, das mit den ";" wusste ich auch noch nicht, wieder was gelernt !

Aber ich habe es jetzt --->

Code:
#!/bin/bash
if [ "$1" = "users" ]
then
 cat /etc/passwd | sort
elif [ "$1" = "ps-root" ]
then
 ps -ef | grep root | sort
elif [ "$1" = "-h" ]
then
 echo Hilfetext fuer 'mein-script'
 echo ==========================
 echo parameter :
 echo users          = ausgabe von /etc/passwd sortiert.
 echo ps-root        = ausgabe von Process Status nach Root sortiert.
 echo -h             = ausgabe von dieser Hilfe Datei.
 echo ohne parameter = keine Funktion.
fi

Das Script funzt, auch ohne ";" !

Wieso funzt das denn ohne ";" sind die nur für eine bessere Übersicht oder muss man die normalerweise setzen ?
 
frodoooo schrieb:
Wieso funzt das denn ohne ";" sind die nur für eine bessere Übersicht oder muss man die normalerweise setzen ?
Am Zeilenende kannst du die Semikolons weglassen, wenn du allerdings alles in eine Zeile schreibst, dann musst du sie setzen.
Also:
Code:
if [...]; then ...; else ...; fi;
oder
Code:
if [...]
  then ...
 else ...
fi
 
Oben