2016-11-23 15 views
0

ersten Mal eine Frage hier und immer noch Bash lernen, so mit mir zu tragen.Bash-Skript-Fehler mit while und case

Ich machte einen Hauptbildschirm mit while und case, es sollte funktionieren, aber es ist nicht und ich weiß nicht, wo ich einen Fehler gemacht habe.


while [ $WH!=5 ] 
do 

echo "Choice menu:" 
echo "   1) Option 1" 
echo "   2) Option 2" 
echo "   3) Option 3" 
echo "   4) Option 4" 
echo "   5) End script" 
echo -n "Choose an option: " 
read $OP 

case $OP in 
     1) 
      # code;; 

     2) 
      # more code;; 

     3) 
      # more code;; 

     4) 
      # even more code;; 

     5) 
      echo "Thank you for testing this script!" 
      $WH=5;; 
esac 
done 

Egal, was ich in $OP setzen, hält das Skript das Auswahlmenü zu wiederholen, bis ich es abzubrechen. Ich habe versucht, während und $OP als Bedingung zu bewegen, aber nichts schien zu funktionieren.

+0

Es muss "OP lesen", nicht "lesen $ OP". –

+1

Die 'while' Bedingung ist auch falsch (benötigt Leerzeichen um'! = ') - https://www.shellcheck.net/ wird dir solche Dinge sagen. –

+0

Dies könnte helfen: [Wie ein Bash-Skript zu debuggen?] (Http://unix.stackexchange.com/q/155551/74329) – Cyrus

Antwort

2

Sie haben mehrere Probleme in Ihrem Skript: -

  1. while Konstrukt muss while [ "$WH" != 5 ] sein. Denken Sie daran, alle Shell-Variablen doppelt anzugeben.
  2. Das sollte read Befehl read OP
  3. Die case Konstrukte müssen solche trivialen Probleme mit einer Endung ;;
  4. Die endgültige Zuordnungsanweisung sein WH=5 und nicht $WH=5

Verwenden https://www.shellcheck.net debuggen zu atleast eine Zeile sein sollte .

+1

Alles klar, es ist mir gelungen, alles zu reparieren, vielen Dank! – washedaway

+0

Einige allgemeine Regeln: Verwenden Sie '$', um Variablenwerte zu erhalten, * nicht *, wenn Sie ihre Werte festlegen; Verwenden Sie doppelte Anführungszeichen um Variablenreferenzen ('" $ WH "' anstelle von '$ WH'); und Leerzeichen spielen eine große Rolle in der Shell (z. B. um '! ='). Oh, und noch eins: Es ist am besten, klein geschriebene Variablennamen zu verwenden, Konflikte mit den Variablen zu vermeiden, die eine besondere Bedeutung für die Shell und/oder andere Programme haben (das sind alles Großbuchstaben). –