Shell-Programmierung Problem mit einer Case Anweis

Hi,

ch habe ein Case Anweisung

case $1 in
-h) echo Aufruf $0 -[hcq]
-H) echo Aufruf $0 -[hcq]
–h[e||E][l||L][p||P]) echo Aufruf $? -[hcq]
esac

diese soll eigentlich folgendes machen:
Ich gebe z.B. ./irgendwas.sh -h ein dann soll er mir den Namen der sh Datei ausgeben.
Allerdings funktioniert dieser Vergleich mit den Eingaben nicht

es ist -h -H und -help(allerdings soll nachdem kleinen h egal sein ob ich Gross oder Klein geschrieben habe)

und ich muss dieses leider in einer case Anweisung einbauen mit if habe ich es schon gelöst…nur wie gesagt in der case Anweisung funkts nicht

Hallo,

case $1 in
-h) echo Aufruf $0 -[hcq]
-H) echo Aufruf $0 -[hcq]
–h[e||E][l||L][p||P]) echo Aufruf $? -[hcq]
esac

Ich glaube nicht, dass in case-Ausdrücken Globbing-Ausdrücke verwendet werden können.

Und was soll das ganze? Das ganze Linux-Userland ist case sensitive, d.h. unterscheidet zwischen Groß- und Kleinschreibung. Wieso willst du das hier umgehen?

Grüße,
Moritz

das ist ein Prüfungsaufgabe lerne gerade für die Prüfung am Freitag…

Sinn von der Unterscheidung ist halt das ich kein HELP eingeben darf sondern immer mit nem kleinen h anfangen muss…

habs fast hinbekommen allerdings hapert es echt noch an dem help kram und wie ich mit einem echo einen Satz ausgeben kann(läuft immer auf nen Fehler)
Bin blutiger Anfänger daher weiß ich vieles noch nicht so recht.

case $1 in
-[h]) echo Aufruf $0 -[hcq];;
-[H]) echo Aufruf $0 -[hcq];;
-[h[elp]] echo Aufruf $0 -[hcq];;
esac
echo -n "Befehl eingeben "
read line
case $0 in
-[v]) echo Mit Parameter v aufgerufen. 2 Parameter ist $1;;
-[q]) echo Mit Parameter q aufgerufen ;;
*) echo unerlaubter Parameter;;
esac

das ist ein Prüfungsaufgabe lerne gerade für die Prüfung am
Freitag…

Fuer welches Fach in welcher Ausbildung?

Sinn von der Unterscheidung ist halt das ich kein HELP
eingeben darf sondern immer mit nem kleinen h anfangen muss…

Na, dann schreib das doch hin:

 -HELP)
 echo "Du darfst hier nicht HELP eingeben."
 ;;

habs fast hinbekommen allerdings hapert es echt noch an dem
help kram und wie ich mit einem echo einen Satz ausgeben
kann(läuft immer auf nen Fehler)

Aeh… haeh?

echo "Das ist ein Satz."

Bin blutiger Anfänger daher weiß ich vieles noch nicht so
recht.

> case $1 in  
> -[h]) echo Aufruf $0 -[hcq];;  
> -[H]) echo Aufruf $0 -[hcq];;  
> -[h[elp]] echo Aufruf $0 -[hcq];;  
> esac  
> echo -n "Befehl eingeben "  
> read line  
> case $0 in  
> -[v]) echo Mit Parameter v aufgerufen. 2 Parameter ist $1;;  
> -[q]) echo Mit Parameter q aufgerufen ;;  
> \*) echo unerlaubter Parameter;;  
> esac

Uh… und was soll das jetzt? Naja, bis Freitag ist ja noch ein wenig Zeit. Hints:
http://tldp.org/LDP/abs/html/index.html

-h[Ee][Ll][Pp]|-h|-H)
man getopt
man getopts

HTH,
Gruss vom Frank.

Hallo,

Hi,

ch habe ein Case Anweisung

Gleich mal umgeschrieben…

case $1 in
 -h) echo "Aufruf $0 -[hcq]" ; break ;;
 -H) echo "Aufruf $0 -[hcq]" ; break ;;
 --h[eE][lL][pP]) echo "Aufruf $? -[hcq]" ; break ;;
esac
  • Ein case - Fall wird mit ;; abgeschlossen
  • In Zeichenklassen gehört kein |
  • Bei echo die „“ nicht vergessen…
  • ohne das break gehts im nächsten Zweig weiter, bei -h kommt also alles, wenn du das weglässt
  • $? soll betimmt auch $0 werden in letzten Fall

In der Manual Page zur bash findest du unter „case“ die entsprechende Syntax, bei „Pattern machting“ was allen in einem Muster erlaubt ist…

Da in allen 3 Fällen das Gleiche getan werden soll, geht es auch so

case $1 in
 -h) ;;
 -H) ;;
 --h[eE][lL][pP]) echo "Aufruf $? -[hcq]" ; break ;;
esac

Alexander

Hallo,

Hi,

oh weh, oh weh…

Gleich mal umgeschrieben…

> case $1 in  
> -h) echo "Aufruf $0 -[hcq]" ; break ;;  
> -H) echo "Aufruf $0 -[hcq]" ; break ;;  
> --h[eE][lL][pP]) echo "Aufruf $? -[hcq]" ; break ;;  
> esac

Oder auch

case $1 in
 --h[Ee][Ll][Pp]|-h|-H)
 echo "Aufruf $0 -[hcq]"
 ;;
esac
  • Ein case - Fall wird mit ;; abgeschlossen

Richtig.

  • In Zeichenklassen gehört kein |

Falsch.

  • Bei echo die „“ nicht vergessen…

Kommt drauf an…

  • ohne das break gehts im nächsten Zweig weiter, bei -h kommt
    also alles, wenn du das weglässt

Falsch.

  • $? soll betimmt auch $0 werden in letzten Fall

Richtig.

Zwei richtig, zwei falsch. Hast Du eine Muenze geworfen?

Da in allen 3 Fällen das Gleiche getan werden soll, geht es
auch so

> case $1 in  
> -h) ;;  
> -H) ;;  
> --h[eE][lL][pP]) echo "Aufruf $? -[hcq]" ; break ;;  
> esac

Ach. Ui! Vormachen! (Probierst Du Dinge auch aus?)

Gruss vom Frank.

Hi,

  • In Zeichenklassen gehört kein |

Falsch.

Wozu soll das | innerhalb der Zeichenklasse, also in [] gut sein ? Wird das da nicht nur als „normales“ Zeichen behandelt ? Zwischen den Alternativen ok, aber in einer Zeichenklasse ?

  • ohne das break gehts im nächsten Zweig weiter, bei -h kommt
    also alles, wenn du das weglässt

Falsch.

Habe ich leider mit C verwechselt, arghhh

Zwei richtig, zwei falsch. Hast Du eine Muenze geworfen?

Da in allen 3 Fällen das Gleiche getan werden soll, geht es
auch so

Ach. Ui! Vormachen! (Probierst Du Dinge auch aus?)

Ok, ich gebe ja zu, ich saß gerade an 'nem Windows-Rechner und habe es nicht probiert… natürlich kann es so nicht gehen, das würde nur gehen, wenn sich das wie in C verhält… Folgefehler :smile:

Alexander