Verlassen einer doppelten CASE-Struktur --> WIE?

Einfach Dinge, die nichts mit XAMPP, Apache Friends, Apache, MySQL, PHP und alle dem zu tun haben. Allerlei halt. ;)

Verlassen einer doppelten CASE-Struktur --> WIE?

Postby pir187 » 20. July 2004 09:28

Hallo liebe XAMPPer!

Ich habe ein Prob mit der Bash. In meinem Backupskript funktioniert das Verlassen einer doppelten case-Struktur nicht so, wie ich es will. Ich muß dazu einen Trick anwenden, der aber wohl nicht ganz astrein ist. Hier erst einmal der Code:

Code: Select all
#!/bin/bash

function showProgInfo() {
    echo "Benutzung:   backup OPTION"
    echo "Optionen:   <nothing> | hp | db | all"
}

function quit() {
    exit 0
}

case $# in
    0)   PS3="Wahl: "
    select ACTION in "db" "hp" "all" "quit"
    do
       test $ACTION && $0 $ACTION
       test $ACTION || echo "falsche eingabe.";exit 1
    done
    ;;
    1)   case $1 in
    "db")  bash ./db_backup
         test $? == 0 && echo "o.k..."
         test $? == 0 || echo "fehler beim backup!"
      ;;
      
    "hp")  bash ./hp_backup
         test $? == 0 && echo "o.k."
         test $? == 0 || echo "fehler beim backup!"
         ;;
   "all")    bash ./db_backup
         test $? == 0 && echo "o.k..."
         test $? == 0 || echo "fehler beim backup!"
         bash ./hp_backup
         test $? == 0 && echo "o.k."
         test $? == 0 || echo "fehler beim backup!"
         ;;
   "quit") echo "programmende."
         quit
         ;;
   *)     showProgInfo
         ;;
   esac
   ;;
    *)   showProgInfo
    ;;
esac

exit 0


das verlassen durch drücken von "4" im erstellten menü klappt zwar, allerdings nur durch diesen kunstgriff, indem die funktion aufgerufen wird. wenn ich auf die wahl von "quit" mit
Code: Select all
4)  echo "programmende "
     exit 0
      ;;

reagiere, finde ich mich dann im menü wieder, weil nur die innere, aber nicht die äußere case-struktur verlassen wird!

gibt es da noch eine andere möglichkeit, oder bleibt mir nichts anderes übrig, als diese unsanfte methode mit dem aufruf der funktion "quit" zu nutzen?
eigentlich könnte ich mich zufrieden geben, denn das skript macht, was es soll. aber mich interessiert das jetzt mal :twisted:


lg, pir187
pir187
 
Posts: 76
Joined: 13. August 2003 00:15
Location: Struppen / Sachsen

Postby pir187 » 21. July 2004 09:23

was denn, keiner hier, der sich auf`s skripten versteht? das glaub` ich nicht!
pir187
 
Posts: 76
Joined: 13. August 2003 00:15
Location: Struppen / Sachsen

Postby cocifrosch » 06. September 2004 13:40

ich versteh nix von der sprache in der du skriptest, aber theoretisch könnte doch folgendes vorgehen klappen:

variable setzen, die sagt, das du nun ganz raus willst (also alle schleifen beenden) welche du dann anschliessend nach jedemschritt abfragst und abhängig von der varibale die case strucktur verlässt.
cocifrosch
 
Posts: 9
Joined: 09. June 2004 13:09

Re: Verlassen einer doppelten CASE-Struktur --> WIE?

Postby nemesis » 08. September 2004 12:53

Mangels Testplattform und vielleicht anderen Regeln, fällt mir es etwas schwer, aber warum hast du 2 mal das Menü aktiviert?
Code: Select all
   "quit") echo "programmende."
         quit
         ;;
   *)     showProgInfo
         ;;
   esac
   ;;
    *)   showProgInfo
    ;;
esac

exit 0


In der inneren UND der äußeren Schleife.
Eigentlich sollte es doch ausreichen, dass du nur die Innere Schleife hast.
Dann müsste über die letzte Bedingung *) showProgInfo eh die Hilfe aufgerufen werden.
Spar dir die äußere Schleife und das äußere showProgInfo am Schluß.

P.S.: Das Thema hat sich doch eh schon längst erledigt, oder nicht?
Wenn ja, zeig die Lösung doch auf :)
Ubuntu 8.04 | SMP P3 1.4 GHz | 6 GByte RegECC | 74 GByte Seagate 15k5 system | 3Ware 9550SXU-4LP with 4x 500 GByte Seagate ES2 Raid 10 data | StoreCase DE400 | PX-230A | Intel Pro/1000MT Dual PCI-X
User avatar
nemesis
AF Moderator
 
Posts: 999
Joined: 29. December 2002 13:14
Location: Ingolstadt


Return to Allerlei

Who is online

Users browsing this forum: No registered users and 1 guest