Zum Inhalt springen

Script mit for und if geht nicht


Empfohlene Beiträge

Geschrieben

#!/bin/bash


for i in 1 2 3

do

if (( $i == "1" )) ;  then

        var=`df -h | grep c0t3d0s0 | awk '{print $5}' | sed 's/%//'`

fi

if (( $i == "1" )) ;  then

        var=`df -h | grep c0t3d0s3 | awk '{print $5}' | sed 's/%//'`

fi

if (( $i == "1" )) ;  then

        var=`df -h | grep c0t3d0s4 | awk '{print $5}' | sed 's/%//'`

fi



if (( $var >= 2 ))

then awk '{$var}' > /tmp/test

cat /tmp/test |mailx blabla@soso.de;

fi

done

Irgendwie funktioniert das nicht... hab aber natürlich meine richtige mail addy eingetragen, wer kann mir helfen?

Geschrieben

versuch es mal mit if [ $i -eq 1 ] anstelle von if (( $i == "1" )) und mit if [ $var -gt 2 ] anstelle von if (( $var >= 2 ))

Sollte vielleicht im zweiten und dritten if-Konstrukt i auf 2 bzw. 3 geprüft werden???

Geschrieben

Sollte vielleicht im zweiten und dritten if-Konstrukt i auf 2 bzw. 3 geprüft werden???

Ähm, ja kla... das is auch im Original so :D

aber die anderen sachen werd ich mal probieren.... ich berichte gleich...

Edit:

Die veränderung bringt garnix, es passiert genau das gleiche...

nämlich nix, ich rutsch nur ins schwarze aus dem ich nur mit Ctrl+C wieder rauskomme

Geschrieben

if (( $var >= 2 ))

then awk '{$var}' > /tmp/test

cat /tmp/test |mailx blabla@soso.de;

fi

Ich störe mich etwas an dem awk. Was willst du damit machen? Den Inhalt von var nach test schreiben? Dann sollte da stehen echo $var > /tmp/test

Geschrieben

ENDERGEBNIS:

#!/bin/bash


for i  in 1 2 3

do

if (( $i == "1" )) ;  then

        var=`df -h | grep c0t3d0s0 | awk '{print $5}' | sed 's/%//'`

        name=`df -h | grep c0t3d0s0 | awk '{print $6}'`

fi

if (( $i == "2" )) ;  then

        var=`df -h | grep c0t3d0s3 | awk '{print $5}' | sed 's/%//'`

        name=`df -h | grep c0t3d0s3 | awk '{print $6}'`

fi

if (( $i == "3" )) ;  then

        var=`df -h | grep c0t3d0s4 | awk '{print $5}' | sed 's/%//'`

        name=`df -h | grep c0t3d0s4 | awk '{print $6}'`

fi

if (( $var >= 20 ))

then echo $var > /tmp/test

echo $name >> /tmp/test

cat /tmp/test |mailx xxxxxxxx.xxxxxx@xxxxx.de;

fi

done

Geschrieben

wie wäre es mit:


#!/bin/bash

for i in c0t3d0s0 c0t3d0s3 c0t3d0s4

do

   var=`df -h | grep $i| awk '{print $5}' | sed 's/%//'`

   name=`df -h | grep $i | awk '{print $6}'`

   if (( $var >= 20 ))

   then 

      echo $var > /tmp/test

      echo $name >> /tmp/test

      cat /tmp/test |mailx xxxxxxxx.xxxxxx@xxxxx.de;

   fi

done

Die for-Schleife wird genau dreimal durchlaufen, und bei jedem Durchlauf wird eines der if-Konstrukte durchlaufen. Ist also eigentlich unnötig, diese Prüfung einzubauen.

Geschrieben

Die for-Schleife wird genau dreimal durchlaufen, und bei jedem Durchlauf wird eines der if-Konstrukte durchlaufen. Ist also eigentlich unnötig, diese Prüfung einzubauen.

Ähm... ja das geht natürlich auch... *G* naja nun hab ich 2 Möglichkeiten *g* manchmal steht man einfach auf dem Schlauch und sieht nicht, dass es eigentlich so einfach ist....

Danke :)

Geschrieben

neue Aufgabe neues problem.

#!/bin/bash


for var in hme

do

ndd -set /dev/$var  instance 0

if (( ndd -get /dev/$var link_speed == 1 ))

then echo 'Der link_speed beraegt 100' > /tmp/test

else if (( ndd -get /dev/$var link_speed == 0 ))

then  echo 'Der link_speed beraegt 10' > /tmp/test;

fi;

fi

if (( ndd -get /dev/$var link_status == 1 ))

then echo 'Der link_status ist connected' >> /tmp/test

else if (( ndd -get /dev/$var link_status == 0 ))

then  echo 'Der link_status ist disconnected' >> /tmp/test;

fi;

fi

if (( ndd -get /dev/$var link_mode == 1 ))

then echo 'Der link_mode ist full-duplex' >> /tmp/test

else if (( ndd -get /dev/$var link_mode == 0 ))

then  echo 'Der link_mode ist half-duplex' >> /tmp/test;

fi;

fi

cat /tmp/test

done

fehler:
./netspeed: ((: ndd -get /dev/hme link_speed == 1 : division by 0 (error token is "/hme link_speed == 1 ")

./netspeed: ((: ndd -get /dev/hme link_speed == 0 : division by 0 (error token is "/hme link_speed == 0 ")

./netspeed: ((: ndd -get /dev/hme link_status == 1 : division by 0 (error token is "/hme link_status == 1 ")

./netspeed: ((: ndd -get /dev/hme link_status == 0 : division by 0 (error token is "/hme link_status == 0 ")

./netspeed: ((: ndd -get /dev/hme link_mode == 1 : division by 0 (error token is "/hme link_mode == 1 ")

./netspeed: ((: ndd -get /dev/hme link_mode == 0 : division by 0 (error token is "/hme link_mode == 0 ")

Geschrieben

if (( ndd -get /dev/$var link_speed == 1 ))

Verstehe ich das richtig, dass du in den if-Konstrukten prüfen willst, ob der Rückgabewert von ndd -get ... gleich 1 ist? Dann kann das so nicht funktionieren. Versuch es mal mit if (( $(ndd -get /dev/$var link_speed) -eq 1 )) in der if-Abfrage (entsprechend für die anderen if anzupassen).

  • 1 Jahr später...
Geschrieben

Also ich weis nicht genau wie das bei der Bash ist, aber wenn man in der Bourne-Shell eine if-Abfrage macht, benötigt man ein "test".

Also

if test $i == "1" then
oder alternativ
if [$i == "1"] then

Die eckigen Klammern stehen auch für "test"

MfG Deus

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...