if-Anweisung

T

tiptel170

Tripel-As
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
 
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?
 
Egal, wie seine Antwort lauten wird: "== true" ist unnötig. :-)
 
[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
 
Zuletzt bearbeitet:
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
 
Zuletzt bearbeitet:
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
 
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.
 
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
 
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?
 
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.
 
"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

sh /tmp/xxx123.sh
VAR1 leer
VAR1 voll

Probiere es einfach mal selbst.
 
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.


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.
 
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
 
Zuletzt bearbeitet:
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.
 
So sieht es jetzt aus:

Code:
 if  [ test -f ${INV}/*.txt ]
    then
    rm $INV/*.txt
    fi

    if [ test -f ${INV}/vcf?entry=* ]
    then
    rm $INV/vcf?entry=*
    fi
 
Ist ein "=" im Dateinamen?
Wenn ja, mußt du es mit "\" für die Shell maskieren.
 
Ja das "=" ist ein teil vom dateiname.

Habe was probiert:

Code:
if  ( ! test -f "${INV}/vcf?entry=*")
    then
    touch $INV/vcf?entry=.vcf
    rm $INV/vcf?entry=*
    fi

Jetzt werden die dateien gelöscht.
 

Ähnliche Themen

Returncode ($?) bei find immer "0" ?

Switche abfragen über Script

Hilfe für ein shell script

NAS-Drive Mount in Bash-Script über crontab

sed in awk

Zurück
Oben