if-Anweisung

Dieses Thema im Forum "Programmieren allgemein" wurde erstellt von tiptel170, 26.05.2009.

  1. #1 tiptel170, 26.05.2009
    tiptel170

    tiptel170 Tripel-As

    Dabei seit:
    20.07.2008
    Beiträge:
    161
    Zustimmungen:
    0
    Hallo,

    ich habe eine frage zur if-Anweisung:

    Code:
    NUMMER=`echo $2 | sed -e "s/\ //g" -e "s/+49/0/"`
    if [ -d $NUMMER == true]; then
    ...
    else 
    ...
    
    Es wird nur die else-Anweisung abgearbeitet. Soll eigendlich so sein:

    Wenn eine Telefon-Nr. übertragen wird dann soll die then abgearbeitet werden.

    Wie kann ich das machen?

    Gruss tiptel170
     
  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. rikola

    rikola Foren Gott

    Dabei seit:
    23.08.2005
    Beiträge:
    2.133
    Zustimmungen:
    0
    Arbeitest Du mit bash? Dort bedeuet '-d' der man-page zu folgen, dass getestet wird, ob die Datei - in Deinem Fall die Datei mit dem Namen "$NUMMER" - existiert.

    Ist das das Verhalten, das Du moechtest?
     
  4. Tblue

    Tblue Tripel-As

    Dabei seit:
    27.11.2007
    Beiträge:
    188
    Zustimmungen:
    0
    Egal, wie seine Antwort lauten wird: "== true" ist unnötig. :-)
     
  5. #4 NoXqs, 26.05.2009
    Zuletzt bearbeitet: 26.05.2009
    NoXqs

    NoXqs Routinier

    Dabei seit:
    07.05.2007
    Beiträge:
    420
    Zustimmungen:
    0
    Ort:
    Bremen
    [Klugscheissmodus an]

    -d für directory, -f für file

    [Klugscheismodus aus]

    Ist aber für die Frage/Problemstellung völlig egal.

    Je nach dem was in der Variablen steht könnte man mal

    Code:
    
    if [ -z ${NUMMER} ]
    
    
    versuchen.

    Lt man-page:
    -z STRING
    the length of STRING is zero
     
  6. #5 tiptel170, 26.05.2009
    Zuletzt bearbeitet: 26.05.2009
    tiptel170

    tiptel170 Tripel-As

    Dabei seit:
    20.07.2008
    Beiträge:
    161
    Zustimmungen:
    0
    Mir geht es darum, wenn in der Variable $NUMMER eine Telefonnr. drin steht, dann soll die alles nach then abgearbeitet werden, ansonsten else.

    Die Nummer wird aus dem ISDN ausgelesen. Mit dem befehl: NUMMER=`echo $2 | sed -e "s/\ //g" -e "s/+49/0/"` und dann als Variable gesetzt.

    Gruss tiptel170
     
  7. #6 tiptel170, 29.05.2009
    tiptel170

    tiptel170 Tripel-As

    Dabei seit:
    20.07.2008
    Beiträge:
    161
    Zustimmungen:
    0
    Bekomme immer die fehlermeldung:

    Code:
    /usr/bin/isdn_if-schleife.ring: line 86: [: too many arguments
    
    Hier das script (gkürzt):

    Code:
    if [ -o $NUMMER == 1 ]; # Hier wird behauptet, " too many arguments"
        then
    
    #10  Zeile für vcf herausfiletern:
        cat $TMPFILE | grep herunterladen >$INV/tmp.vcf.txt
        tr -s [:blank:] ' '  < $INV/tmp.vcf.txt > $INV/tmpfile.vcf.txt
        cat $INV/tmpfile.vcf.txt | tr -s " " | cut -d " " -f 6 >$INV/tmpfile1.vcf.txt
        cat  $INV/tmpfile1.vcf.txt  | sed 's/href=/\ /g' | sed 's/\"/\ /g' | sed -e '/^ *$/d' | sed 's/^[ \t]*//' > $INV/vcf2.txt
        tr -s [:blank:] ' ' < $INV/vcf2.txt > $INV/vcf.txt
        cat $INV/vcf.txt | sed -ne '1p' > $INV/vcfl1.txt
        cat $INV/vcf.txt | sed -ne '2p' > $INV/vcfl2.txt
        A1=$(cat $INV/vcfl1.txt)
        A2=$(cat $INV/vcfl2.txt)
        wget $HOME$A1  |  wget $HOME$A2
    
            if (test -f "vcf*")
                then
                    mv vcf?* $INV
                fi
    
        # Datei umbenennen in vcf 1.vcf-Datei
        cat $INV/vcfl1.txt | tr '/' ' ' > $INV/vcfl11.txt
        cat $INV/vcfl11.txt | cut -d " " -f 3 > $INV/vcfl12.txt
        cat $INV/vcfl12.txt | tr '\n' ' ' | sed 's/\ /\_/g' | tr -d '_' > $INV/vcfl13.txt
    
        B1=$(cat $INV/vcfl13.txt)
        cat $INV/$B1 | grep N: |sed -ne '3p' | tr ':' '\12' | sed -ne '2p'| tr -d '\r' | tr -d ';' | tr -d '\n'| sed 's/Firma//g' | sed 's/Frau//g' | sed 's/Herr//g' > $INV/vcfl14.txt
        tr ' ' '_' < $INV/vcfl14.txt  | tr -d '\r' | sed 's/__//g' > $INV/vcfl15.txt
    
        B2=$(cat $INV/vcfl13.txt)
        B3=$(cat $INV/vcfl15.txt)
        cp $INV/$B2 $INV/$B3.vcf
    
        if [ -d $INV/addr ]; then
         ls $INV/addr
          else
            mkdir $INV/addr
            fi
     # Log-Datei erstellen
        cat $INV/$B1 | tr ';' ' ' | tr ':' ' ' | tr -d '\r' >$INV/log1.log
        cat $INV/log1.log | grep TEL > $INV/log_tel1.log
        cat $INV/log_tel1.log | sed -ne '1p' | cut -d " " -f 7-15 | sed i\ Tel.: | tr '\12' ' ' > $INV/log_tel-tel1.log
          mv $INV/log_tel-tel1.log $INV/tel1.log
        cat $INV/log_tel1.log | sed -ne '2p' | cut -d " " -f 6-15 | sed i\ Fax: | tr '\12' ' ' > $INV/log_tel-fax1.log
        mv $INV/log_tel-fax1.log $INV/fax1.log
        cat $INV/log_tel1.log | sed -ne '3p' | cut -d " " -f 6-15 | sed i\ Cel.: | tr '\12' ' ' > $INV/log_tel-cel1.log
        mv $INV/log_tel-cel1.log $INV/cel1.log
    
    #15 Vorbereitung für die if-Schleife 25.05.2009
        cat $INV/log_tel1.log | sed -ne '1p' | cut -d " " -f 7-15 | tr -d '\12' | tr -d ' ' > $INV/log_telif1
    
        cat $INV/$B1 | grep N: |sed -ne '3p' | tr ':' '\12' | sed -ne '2p' | tr -d '\r' | tr -d ';' | tr -d '\n'  | sed 's/Firma//g' | sed 's/Frau//g' | sed 's/Herr//g' > $INV/name1.log
        cat $INV/$B1 | grep ADR | tr ':' ' ' | cut -d " " -f 2-30 | tr ';' '\12' | tr -d '\r' | sed -ne '3,4p' > $INV/adr1.log
        cat $INV/$B1 | grep EMAIL | tr ':' '\12' | sed -ne '2p' | tr -d '\r' > $INV/email1.log
        cat $INV/$B1 | grep URL\;WORK | sed 's/URL\;WORK://g' | tr -d '\r' > $INV/http1.log
    
        # Datei umbenennen in vcf 2.vcf-Datei
        cat $INV/vcfl2.txt | tr '/' ' ' > $INV/vcfl21.txt
        cat $INV/vcfl21.txt | cut -d " " -f 3 > $INV/vcfl22.txt
        cat $INV/vcfl22.txt | tr '\n' ' ' | sed 's/\ /\_/g' | tr -d '_' > $INV/vcfl23.txt
    
        C1=$(cat $INV/vcfl23.txt)
        cat $INV/$C1 | grep N: |sed -ne '3p' | tr ':' '\12' | sed -ne '2p'| tr -d '\r' | tr -d ';' | tr -d '\n'  | sed 's/Firma//g' | sed 's/Frau//g' | sed 's/Herr//g' > $INV/vcfl24.txt
        tr ' ' '_' < $INV/vcfl24.txt  | tr -d '\r' | sed 's/__//g' > $INV/vcfl25.txt
    
        C2=$(cat $INV/vcfl23.txt)
        C3=$(cat $INV/vcfl25.txt)
        cp $INV/$C2 $INV/$C3.vcf
    
        # Log-Datei erstellen
        cat $INV/$C1 | tr ';' ' ' | tr ':' ' ' | tr -d '\r' >$INV/log2.log
        cat $INV/log2.log | grep TEL > $INV/log_tel2.log
        cat $INV/log_tel2.log | sed -ne '1p' | cut -d " " -f 7-15 | sed i\ Tel.: | tr '\12' ' ' > $INV/log_tel-tel2.log
        mv $INV/log_tel-tel2.log $INV/tel2.log
        cat $INV/log_tel2.log | sed -ne '2p' | cut -d " " -f 6-15 | sed i\ Fax: | tr '\12' ' ' > $INV/log_tel-fax2.log
        mv $INV/log_tel-fax2.log $INV/fax2.log
        cat $INV/log_tel2.log | sed -ne '3p' | cut -d " " -f 6-15 | sed i\ Cel.: | tr '\12' ' ' > $INV/log_tel-cel2.log
        mv $INV/log_tel-cel2.log $INV/cel2.log
    #20 Vorbereitung if-Schleife
        cat $INV/log_tel2.log | sed -ne '1p' | cut -d " " -f 7-15 | tr -d '\12' | tr -d ' ' > $INV/log_telif2
    
        cat $INV/$C1 | grep N: |sed -ne '3p' | tr ':' '\12' | sed -ne '2p' | tr -d '\r' | tr -d ';' | tr -d '\n' | sed 's/Firma//g' | sed 's/Frau//g' | sed 's/Herr//g'  > $INV/name2.log
        cat $INV/$C1 | grep ADR | tr ':' ' ' | cut -d " " -f 2-30 | tr ';' '\12' | tr -d '\r' | sed -ne '3,4p' >  $INV/adr2.log
        cat $INV/$C1 | grep EMAIL | tr ':' '\12' | sed -ne '2p' | tr -d '\r' > $INV/email2.log
        cat $INV/$C1 | grep URL\;WORK | sed 's/URL\;WORK://g' | tr -d '\r' > $INV/http2.log
    
            if (test -f $INV/log_telif1) then
                D1=$(cat $INV/log_telif1)
                else
                echo "0" > $INV/log_telif1
                D1=$(cat $INV/log_telif1)
            fi
    
        if (test -f $INV/log_telif2) then
            D2=$(cat $INV/log_telif2)
            else
            echo "0" > $INV/log_telif2
            D2=$(cat $INV/log_telif2)
     fi
    
    #With an else-clause:
    #      if {$NUMMER == 1}
    #            then
    #           {
                if [ $NUMMER = $D1 ]; then
    
                cp $INV/vcfl15.txt $INV/vbox.name
                cp $INV/vbox.name $FAX/fax.name
                chown -R $FAXU $FAX/fax.name | chmod 666 $FAX/fax.name
    
                else
                rm $INV/vbox.name $FAX/fax.name
                rm $INV/txttmp11 $INV/$B3.vcf
                rm $INV/addr/Address.vcf
                echo "Unbekannt" > $INV/vbox.name
                echo "Unbekannt" > $FAX/fax.name
                chown -R $FAXU $FAX/fax.name | chmod 666 $FAX/fax.name
                rm $INV/tel1.log $INV/fax1.log $INV/cel1.log $INV/name1.log $INV/adr1.log $INV/email1.log $INV/http1.log
                echo "Tel.: ?" > $INV/tel1.log
                echo "Fax: ?" > $INV/fax1.log
                echo "Cel.: ?" > $INV/cel1.log
                echo "Unbekannt" > $INV/name1.log
                echo "---------" > $INV/adr1.log
                echo " @ " > $INV/email1.log
                echo "http:" > $INV/http1.log
                touch $INV/txttmp11
                touch $INV/Unbekannt.vcf
                touch $INV/addr/Address.vcf
                fi
    
        tail $INV/name1.log  >> $INV/txttmp10
        echo " " >> $INV/txttmp10
        tail $INV/adr1.log  >> $INV/txttmp10
        tail $INV/tel1.log      >> $INV/txttmp10
        echo " " >> $INV/txttmp10
        tail $INV/cel1.log      >> $INV/txttmp10
        echo " " >> $INV/txttmp10
        tail $INV/fax1.log  >> $INV/txttmp10
        echo " " >> $INV/txttmp10
        tail $INV/email1.log >> $INV/txttmp10
        echo " " >> $INV/txttmp10
        tail $INV/http1.log >> $INV/txttmp10
    
        cp $INV/$B3.vcf $INV/addr/Address.vcf
    
        if [ $NUMMER = $D1 ]; then
            mv $INV/txttmp10 $INV/txttmp11
        else
             cat $INV/txttmp10 | sed -e '/^ *$/d'  > $INV/txttmp11
             rm $INV/txttmp10
        fi
    
    #25
    
            if [ $NUMMER = $D2 ]; then
                cp $INV/$C3.vcf $INV/addr/Address1.vcf
            else
               rm $INV/txttmp12 $INV/$C3.vcf
               rm $INV/addr/Address1.vcf
               rm $INV/tel2.log $INV/fax2.log $INV/cel2.log $INV/name2.log $INV/adr2.log $INV/email2.log $INV/http2.log
               touch $INV/tel2.log
               touch $INV/fax2.log
               touch $INV/cel2.log
               touch $INV/name2.log
               touch $INV/adr2.log
               touch $INV/email2.log
               touch $INV/http2.log
               touch $INV/addr/Address1.vcf
               touch $INV/Unbekannt1.vcf
               rm $FAX/fax.nr  $INV/vbox.nr
               echo "Unbekannte_Rufnnummer" > $FAX/fax.nr
               chown -R $FAXU $FAX/fax.nr | chmod 666 $FAX/fax.nr
               echo "Unbekannter_Anrufer" > $INV/vbox.nr
            fi
    
        tail $INV/name2.log  >> $INV/txttmp120
        echo " " >> $INV/txttmp120
        tail $INV/adr2.log  >> $INV/txttmp120
        tail $INV/tel2.log      >> $INV/txttmp120
        echo " " >> $INV/txttmp120
        tail $INV/cel2.log      >> $INV/txttmp120
        echo " " >> $INV/txttmp120
        tail $INV/fax2.log  >> $INV/txttmp120
        echo " " >> $INV/txttmp120
        tail $INV/email2.log >> $INV/txttmp120
        echo " " >> $INV/txttmp120
        tail $INV/http2.log >> $INV/txttmp120
    
                        if [ $NUMMER = $D1 ]; then
                        mv $INV/txttmp120 $INV/txttmp12
                        else
                        cat $INV/txttmp120 | sed -e '/^ *$/d'  > $INV/txttmp12
                        rm $INV/txttmp120
                        fi
    
    else
                 echo "Unbekannt" > $INV/vbox.name
                 echo "Unbekannt" > $FAX/fax.name
                 chown -R $FAXU $FAX/fax.name | chmod 666 $FAX/fax.name
                 echo "Tel.: ?" > $INV/tel1.log
                 echo "Fax: ?" > $INV/fax1.log
                 echo "Cel.: ?" > $INV/cel1.log
                 echo "Unbekannt" > $INV/name1.log
                 echo "---------" > $INV/adr1.log
                 echo " @ " > $INV/email1.log
                 echo "http:" > $INV/http1.log
                 touch $INV/txttmp11
                 touch $INV/Unbekannt.vcf
                 touch $INV/addr/Address.vcf
    
                 touch $INV/tel2.log
                 touch $INV/fax2.log
                 touch $INV/cel2.log
                 touch $INV/name2.log
                 touch $INV/adr2.log
                 touch $INV/email2.log
                 touch $INV/http2.log
                 touch $INV/addr/Address1.vcf
                 touch $INV/Unbekannt1.vcf
                 echo "Unbekannte_Rufnnummer" > $FAX/fax.nr
                 chown -R $FAXU $FAX/fax.nr | chmod 666 $FAX/fax.nr
                 echo "Unbekannter_Anrufer" > $INV/vbox.nr
                 tail $INV/name1.log  >> $INV/txttmp111
                 echo " " >> $INV/txttmp111
                 tail $INV/adr1.log  >> $INV/txttmp111
                 tail $INV/tel1.log      >> $INV/txttmp111
                 echo " " >> $INV/txttmp111
                 tail $INV/cel1.log      >> $INV/txttmp111
                 echo " " >> $INV/txttmp111
                 tail $INV/fax1.log  >> $INV/txttmp111
                 echo " " >> $INV/txttmp111
                 tail $INV/email1.log >> $INV/txttmp111
                 echo " " >> $INV/txttmp111
                 tail $INV/http1.log >> $INV/txttmp111
    
                 cat $INV/txttmp111 | sed -e '/^ *$/d'  > $INV/txttmp11
                 rm $INV/txttmp111
    
                  tail $INV/name2.log  >> $INV/txttmp121
                  echo " " >> $INV/txttmp121
                  tail $INV/adr2.log  >> $INV/txttmp121
                  tail $INV/tel2.log      >> $INV/txttmp121
                  echo " " >> $INV/txttmp121
                  tail $INV/cel2.log      >> $INV/txttmp121
                  echo " " >> $INV/txttmp121
                  tail $INV/fax2.log  >> $INV/txttmp121
                  echo " " >> $INV/txttmp121
                  tail $INV/email2.log >> $INV/txttmp121
                  echo " " >> $INV/txttmp121
                  tail $INV/http2.log >> $INV/txttmp121
    
                  cat $INV/txttmp121 | sed -e '/^ *$/d'  > $INV/txttmp12
                  rm $INV/txttmp121
    
    fi
    
    
    vielleicht hilft dies weiter, wie geschrieb, wenn eine rufnummer übermittelt wird, dann soll then abgearbeitet werden.

    Gruss tiptel170
     
  8. #7 floyd62, 29.05.2009
    floyd62

    floyd62 Routinier

    Dabei seit:
    01.05.2007
    Beiträge:
    309
    Zustimmungen:
    0
    Versuch das Ganze doch mal sauber mit Quotes, d.h. statt
    Code:
    [ -z ${NUMMER} ]
    
    einfach mal
    Code:
    [ -z "${NUMMER}" ]
    
    ... sonst gibt das immer Probleme, wenn deine Variablen irgendwelche Leerzeichen (oder anderen Schrott, der von der Shell interpretiert wird) enthalten ... und gib Bescheid, ob das was bringt.

    Gruss,
    A.
     
  9. NoXqs

    NoXqs Routinier

    Dabei seit:
    07.05.2007
    Beiträge:
    420
    Zustimmungen:
    0
    Ort:
    Bremen
    Irgendwie kommt mir das
    Code:
          if (test -f $INV/log_telif1) then
    
    komisch vor.

    Bitte ändere das in
    Code:
          if [ -f $INV/log_telif1 ] then
    
     
  10. #9 tiptel170, 29.05.2009
    tiptel170

    tiptel170 Tripel-As

    Dabei seit:
    20.07.2008
    Beiträge:
    161
    Zustimmungen:
    0
    Es funktioniert so nicht, denn wenn ich eine nummer eingebe, dann wird der teil in "then" nicht abgearbeitet. Wenn ich die nummer nicht eintrage, wird die "else" falsch abgearbeitet.

    Wie schaffe ich es, wenn die variable $NUMMER eingtragen ist, dass auch then abgearbeitet wird?

    Bringt mir in dem fall "true" etwas?
     
  11. NoXqs

    NoXqs Routinier

    Dabei seit:
    07.05.2007
    Beiträge:
    420
    Zustimmungen:
    0
    Ort:
    Bremen
    Was soll denn
    Code:
    if [ -o $NUMMER == 1 ]; # Hier wird behauptet, " too many arguments"
    
    testen?

    In meiner test-manpage gibt es "-o" nicht, außer als OR-Anweisung zwischen zwei test-Anweisungen.

    Hast du mal "-z" probiert? (wie oben schon geschrieben)
    Allerdings wäre in deinem Fall wohl eher
    Code:
    if [ ! -z $NUMMER ]
    
    zu bevorzugen.
     
  12. #11 tiptel170, 29.05.2009
    tiptel170

    tiptel170 Tripel-As

    Dabei seit:
    20.07.2008
    Beiträge:
    161
    Zustimmungen:
    0
    das mit -z habe ich schon probiert. Bringt nix
     
  13. NoXqs

    NoXqs Routinier

    Dabei seit:
    07.05.2007
    Beiträge:
    420
    Zustimmungen:
    0
    Ort:
    Bremen
    "Bringt nix" ist eine hervorragende Fehlerbeschreibung.
    Respekt.

    Code:
    #!/usr/bin/sh
    
    VAR1=""
    
    if [ ! -z "${VAR1}" ]
     then
      echo "VAR1 voll"
    else
      echo "VAR1 leer"
    fi
    
    VAR1="123456"
    
    if [ ! -z "${VAR1}" ]
     then
      echo "VAR1 voll"
    else
      echo "VAR1 leer"
    fi
    
    Probiere es einfach mal selbst.
     
  14. #13 tiptel170, 29.05.2009
    tiptel170

    tiptel170 Tripel-As

    Dabei seit:
    20.07.2008
    Beiträge:
    161
    Zustimmungen:
    0

    Das if [ ! -z $NUMMER ] , das funktioniert.
    Was bedeutet das "!" ?

    Wie bekomme ich es hin mit dem punkt:

    Code:
    if  (test -f "rm $INV/*.txt")
        then
        rm $INV/*.txt
        fi
    
    Das mir die meheren txt-Dateien löscht, wenn die auch da sind? Mit einer datei geht das.
     
  15. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  16. #14 NoXqs, 29.05.2009
    Zuletzt bearbeitet: 29.05.2009
    NoXqs

    NoXqs Routinier

    Dabei seit:
    07.05.2007
    Beiträge:
    420
    Zustimmungen:
    0
    Ort:
    Bremen
    Das "!" ist immer ein Negationszeichen für jeden Parameter beim test command.
    Also auf deutsch, "nicht".

    Code:
    (test -f "rm $INV/*.txt")
    
    Du fagst in dieser Anweisung, ob es ein file "rm $INV/*.txt" gibt.
    Gibt es natürlich nicht. Es gibt nur die Files "$INV/*.txt".
    Lass da "rm" weg und benutze statt runden Klammern, eckige für das test-command.

    Also :
    Code:
     [ -f "$INV/*.txt" ]
    
    Außerdem, wie floyd62 schon gesagt hat, setze Gänsefüsschen um jede Variable (für NULL-Werte, das mag test nicht) und ich würde jede Variable noch in "{}" packen.
    Dann ist es ganz sauber. z.b: ${INV}/*.txt
     
  17. #15 tiptel170, 29.05.2009
    tiptel170

    tiptel170 Tripel-As

    Dabei seit:
    20.07.2008
    Beiträge:
    161
    Zustimmungen:
    0
    Oh sorry - copy und paste lässt grüssen.
    Bekomme jetzt den fehler:

    Code:
     [: -f: binary operator expected
    
    Aber die dateien werden nicht glöscht.
     
Thema:

if-Anweisung

Die Seite wird geladen...

if-Anweisung - Ähnliche Themen

  1. 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...
  2. 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...