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

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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