If Anweisung in einer If anweisung usw

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von xXNemesisXx, 24.01.2008.

  1. #1 xXNemesisXx, 24.01.2008
    xXNemesisXx

    xXNemesisXx Jungspund

    Dabei seit:
    12.12.2007
    Beiträge:
    18
    Zustimmungen:
    0
    Hi,
    ich habe da ein kleines problem!
    denn ich sehe vor lauter "if" und "[]" den Wald nicht mehr!

    Ich habe eine Variable die dank eines Menüfeldes nur 3 verschiedene Werte haben kann!

    tar ODER tar.gz ODER tar.bz2

    von links nach rechts möchte ich das
    wenn die Variable "lbu_type" den wert tar hat (lbu_type == 'tar')...
    Die Shell diesen Befehl abarbeitet.

    tar -cf ${lbu_name//lbu_name} ${lbu_speicher//lbu_verz}
    mv ${lbu_name//lbu_name} ${lbu_ort//lbu_ort}

    wenn (lbu_type == 'tar.gz')

    tar -cfz ${lbu_name//lbu_name} ${lbu_speicher//lbu_verz}
    mv ${lbu_name//lbu_name} ${lbu_ort//lbu_ort}

    wenn (lbu_type == 'tar.bz2')

    tar -cfj ${lbu_name//lbu_name} ${lbu_speicher//lbu_verz}
    mv ${lbu_name//lbu_name} ${lbu_ort//lbu_ort}

    wem es nicht auffällt es ändern sich immer nur die Optinen -cf für tar -cfz für gzip und -cfj für bz2

    Also sind es 3 if anweisungen in einer (so zusagen!)

    Mit 2 habe ich kein Problem, aber bei drei spuckt er mir fehlermeldungen entgegen!

    Könnte jemand helfen?
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 Wolfgang, 24.01.2008
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Was du suchst ist case

    Gruß Wolfgang
     
  4. #3 GambaJo, 24.01.2008
    GambaJo

    GambaJo Maxi King alraaaight!!!

    Dabei seit:
    08.01.2008
    Beiträge:
    171
    Zustimmungen:
    0
    "Case" oder "Switch" ist da die richtige Wahl.

    An sonsten:

    Für gewöhnlich hilft eine vernünftige Formatierung Wunder. Meistens werden die Befehle innerhalb einer if-Abfrage eingerückt (z.B. 2 Zeichen nach rechts). Gibt es verschachtelte if-Abfragen, werden diese auch eingerückt, und deren Befehle auch. Vereinfacht gesagt ungefähr so:
    Code:
    if(blabla)
    {
      Befehl1;
      if(lala)
      {
        Befehl3;
        if(gugu)
        {
          Befehl11;
        }
      }
      Befehl4;
    }
     
  5. #4 xXNemesisXx, 24.01.2008
    xXNemesisXx

    xXNemesisXx Jungspund

    Dabei seit:
    12.12.2007
    Beiträge:
    18
    Zustimmungen:
    0
    ömmm nicht ganz verstanden hab -.-

    Code:
    if (lbu_type == 'tar')
    {
    	Befehl1;
    	if (lbu_type == 'tar.gz')
    	{
    		tar -cfz ${lbu_name//lbu_name} ${lbu_speicher//lbu_verz}
    		mv ${lbu_name//lbu_name} ${lbu_ort//lbu_ort}
    		if (lbu_type == 'tar.bz2')
    		{
    			tar -cfj ${lbu_name//lbu_name} ${lbu_speicher//lbu_verz}
    			mv ${lbu_name//lbu_name} ${lbu_ort//lbu_ort}
    		}
    	}
    	tar -cf ${lbu_name//lbu_name} ${lbu_speicher//lbu_verz}
    	mv ${lbu_name//lbu_name} ${lbu_ort//lbu_ort}
    }
    Ergebnis:
     
  6. #5 Wolfgang, 24.01.2008
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    1. Meckert hier mysql, was in deinem Code-Auszug nicht vorkommt.
    2. Was soll das hier für ein Vergleich sein?
      Code:
      if (lbu_type == 'tar') 
    3. Von welcher Shell ist hier die Rede?
     
  7. #6 xXNemesisXx, 24.01.2008
    xXNemesisXx

    xXNemesisXx Jungspund

    Dabei seit:
    12.12.2007
    Beiträge:
    18
    Zustimmungen:
    0
    ne die datei heisst mysql...


    Code:
    #!/bin/sh
    # Datenbank abfragen
    lbu_speicher=`echo "SELECT lbu_verz FROM last_backup" | mysql -u Blubber --password=NARV BackUp`
    lbu_ort=`echo "SELECT lbu_ort FROM last_backup" | mysql -u Blubber --password=NARV BackUp`
    lbu_name=`echo "SELECT lbu_name FROM last_backup" | mysql -u Blubber --password=NARV BackUp`
    lbu_name=`echo "SELECT lbu_type FROM last_backup" | mysql -u Blubber --password=NARV BackUp`
    # Wechsel ins Verzeichnis
    cd /var/www
    # Erstelle BackUp Archiv
    if (lbu_type == 'tar')
    {
    	Befehl1;
    	if (lbu_type == 'tar.gz')
    	{
    		tar -cfz ${lbu_name//lbu_name} ${lbu_speicher//lbu_verz}
    		mv ${lbu_name//lbu_name} ${lbu_ort//lbu_ort}
    		if (lbu_type == 'tar.bz2')
    		{
    			tar -cfj ${lbu_name//lbu_name} ${lbu_speicher//lbu_verz}
    			mv ${lbu_name//lbu_name} ${lbu_ort//lbu_ort}
    		}
    	}
    	tar -cf ${lbu_name//lbu_name} ${lbu_speicher//lbu_verz}
    	mv ${lbu_name//lbu_name} ${lbu_ort//lbu_ort}
    }
    das ist der zeit das komplette script
     
  8. #7 Wolfgang, 24.01.2008
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Das hier ist kein variablenname:
    Code:
    [B]${lbu_name//lbu_name}[/B]
    Sondern in der Bash eine Ersetzung. Entferne alle Vorkommen von lbu_name" im Inhalt der Variable $lbu_name. Willst du das wirklich?
    Code:
    if (lbu_type == 'tar.gz')
    
    In der Bash
    Code:
    if [ $lbu_type = "string" ]; then
    ...
    fi
    

    Aber du hast nicht auf die Frage bzw Rules in diesem Forum geachtet:
    Welches OS welche Shell!
    Das sieht jedenfalls nicht nach Bash oder ksh aus.
     
  9. #8 xXNemesisXx, 24.01.2008
    xXNemesisXx

    xXNemesisXx Jungspund

    Dabei seit:
    12.12.2007
    Beiträge:
    18
    Zustimmungen:
    0
    Hä?
    Ich will doch nur eine Variable die die werte tar ODER tar.gz ODER tag.bz2 haben KANN auswerten und wenn die Variable den wert tar hat soll sie das machen... wenn sie den wert tar.gz hat dieses und wenn tar.bz2 dran ist soll sie das machen...!

    Ich habe Debian Etch und laut dem Kommentar ganz oben in meinen Script ist es die sh shell!
     
  10. #9 L0s3r, 24.01.2008
    Zuletzt bearbeitet: 24.01.2008
    L0s3r

    L0s3r Tripel-As

    Dabei seit:
    22.09.2007
    Beiträge:
    216
    Zustimmungen:
    0
    Ort:
    MV
    /bin/sh könnte dash sein und theoretisch könnte man hier auch mit elif arbeiten.

    Code:
    if [ $lbu_type = "tar.gz" ] ; then
    ...
    elif [ $lbu_type = "tar.bz2" ] ; then
    ...
    elif ...
    fi
    
     
  11. #10 Wolfgang, 24.01.2008
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    /bin/sh kann dash bash ash ksh ... theoretisch alles sein.
    Deine Syntax da oben ist aber falsch.
    Das sieht eher nach perl oder so aus.
    Siehe mein vorletztes Posting.

    Vergleich (String ) in der Bash:
    Code:
    if [ "$var" = "teststring" ]; then 
    command;
    ...
    fi
    
     
  12. #11 GambaJo, 24.01.2008
    GambaJo

    GambaJo Maxi King alraaaight!!!

    Dabei seit:
    08.01.2008
    Beiträge:
    171
    Zustimmungen:
    0
    @Wolfgang:
    Das war nur ein theoretisches Beispiel, wie man durch Einrücken Übersichtlichkeit gewinnt. Das solltest Du nicht 1:1 auf deinen Code übertragen.
     
  13. L0s3r

    L0s3r Tripel-As

    Dabei seit:
    22.09.2007
    Beiträge:
    216
    Zustimmungen:
    0
    Ort:
    MV
    Hast ja recht :D

    Kubuntu:
    Code:
    $ ll /bin/sh
    lrwxrwxrwx 1 root root 4 2007-10-26 01:38 /bin/sh -> dash
    Debian:
    Code:
    $ ll /bin/sh
    lrwxrwxrwx 1 root root 4 2007-12-09 13:42 /bin/sh -> bash
     
  14. #13 Wolfgang, 24.01.2008
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    ich habe überhaupt nichts übertragen. ;)

    Aber was nützt Einrücken, wenn die Syntax nicht richtig ist?:devil:
    Dann hast du allenfalls übersichtlichen nicht funktionierenden Code. :D
     
  15. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  16. #14 xXNemesisXx, 24.01.2008
    xXNemesisXx

    xXNemesisXx Jungspund

    Dabei seit:
    12.12.2007
    Beiträge:
    18
    Zustimmungen:
    0
    HALLLO???

    Ihr macht mich fertig! :oldman

    Code:
    if	[$lbu_type == 'tar'];	then
    	tar -cf ${lbu_name//lbu_name} ${lbu_speicher//lbu_verz}
    	mv ${lbu_name//lbu_name} ${lbu_ort//lbu_ort}
    elif	[$lbu_type == 'tar.gz'];	then
    	tar -cfz ${lbu_name//lbu_name} ${lbu_speicher//lbu_verz}
    	mv ${lbu_name//lbu_name} ${lbu_ort//lbu_ort}
    elif	[$lbu_type == 'tar.bz2'];	then
    	tar -cfj ${lbu_name//lbu_name} ${lbu_speicher//lbu_verz}
    	mv ${lbu_name//lbu_name} ${lbu_ort//lbu_ort}
    fi
    das ist nun der Code

    Und die Fehlermeldung ist diese:

    ./mysql: line 10: [: missing `]'
    ./mysql: line 13: [: missing `]'
    ./mysql: line 16: [: missing `]'

    wieso gebt ihr mir beispiele die sowie so nicht gehen!
     
  17. #15 GambaJo, 24.01.2008
    GambaJo

    GambaJo Maxi King alraaaight!!!

    Dabei seit:
    08.01.2008
    Beiträge:
    171
    Zustimmungen:
    0
    @Wolfgang:

    Ups, da habe ich den falschen angesprochen. Meinte eigentlich xXNemesisXx.

    Übersichtlicher Code lässt sich einfacher nach Fehlern untersuchen. Wenn man schon nicht sehen kann, welche Klammer wo geschlossen wird, dann wird die Fehlersuche zu einer Qual.
     
Thema:

If Anweisung in einer If anweisung usw

Die Seite wird geladen...

If Anweisung in einer If anweisung usw - Ähnliche Themen

  1. awk: Dateiinhalt/Variableninhalt als Teil einer if-Anweisung

    awk: Dateiinhalt/Variableninhalt als Teil einer if-Anweisung: Hallo Ich habe folgendes Problem: Anhand dem Ergebnis einer Datenbankabfrage habe ich mir mit sed usw. einen String gebastelt und in einer Datei...
  2. Ausgabe umleitung in einer IF Anweisung

    Ausgabe umleitung in einer IF Anweisung: Hallo zusammen Ich hab mir mal en kleines Script für die Zeitsynchronisation gebastelt. Jetzt habe ich ein Problem: ... ---------- if [...
  3. IF-Anweisung - Bedienung entziffern

    IF-Anweisung - Bedienung entziffern: Hallo liebe Community, ich bin gerade dabei ein altes Shell-Script an neue Eingabe anzupassen. Drei IF-Anweisungen sind für mich nicht...
  4. Unix Script: Case Anweisung - Mehrere Befehle

    Unix Script: Case Anweisung - Mehrere Befehle: Hallo Zusammen, ich habe folgendes Konstrukt: case $VAR in PARAM1) Batch_cmd="$PFAD_0/../Verarbeitung.sh $PFAD_1"; BATCHPROG="";...
  5. awk skript: Probleme mit if und else Anweisungen

    awk skript: Probleme mit if und else Anweisungen: Hallo, ich verzweifle an einem für mich schon sehr fortgeschrittenen Programm. Ich hab komplexe Textdateien (log Dateien), den ich bestimmte...