backspace
Goto Top

For Schleife in Shelldatei

Hallo,

Hallo zusammen,

ich hatte eine Shelldatei geschrieben, welche mir die Laufwerke und den entsprechenden freien Speicher ausliest.

Nun soll ich diese Shelldatei in ihrem Umfang verkleinern (über for-schleife).

Mein kläglicher Versuch dazu:

#!/bin/sh

AnzahlLaufwerke=`df -hT | grep "%" | grep -v cifs | grep -v Typ | wc -l`  

#obere Zeile: Filterung nach bestimmten Laufwerken


$AnzahlLaufwerke=AnzahlLaufwerke;

  for ((i=1; i=$AnzahlLaufwerke; i++));

  do echo
  {

  "Laufwerk=`df -hT | grep -v Dateisystem | grep -v server_share | grep -v mapper | awk '{print $NF}' | sed -n 'p'`";  

  "FreierSpeicher=`df -hT | grep -v Dateisystem | grep -v server_share | grep -v mapper | awk '{print $(NF-1)}' | sed -n 'p'`";  

  };

  done

==> Die Sachen werden zwar ausgelesen, jedoch:
1. in einer Endlosschleife
2. es sollten nur drei Laufwerke angezeigt werden (siehe Befehlszeile "AnzahlLaufwerke > Filterung), es werden aber alle 4 angezeigt (inklusive dem cifs).


Die alte Shelldatei hatte ich so geschrieben, dass die Zeilen für Laufwerk und FreierSpeicher insgesamt 3 mal vorkamen, also die Prozedur 3 mal abgefragt wurde, unzwar für jede ausgelesene Zeile in der sich ein Laufwerk befand (siehe Befehl: sed -n 'p', für das 'p' stand jeweils einmal '1p', '2p', '3p').


Das For-Tutorial hier im Forum habe ich auch gelesen, bevor jemand fragt.

Danke

Gruß

Backspace

Content-Key: 156202

Url: https://administrator.de/contentid/156202

Printed on: April 26, 2024 at 18:04 o'clock

Member: cry
cry Dec 02, 2010 at 13:28:10 (UTC)
Goto Top
Zitat von @Backspace:
>   for ((i=1; i=$AnzahlLaufwerke; i++));
> 

Ohne jetzt groß drüber nachgedacht zu haben, stimmt hier mit Deiner Abbruchbedingung was nicht.
Proboer das man so:

AnzahlLaufwerke=3
for ((i=1; i<=$AnzahlLaufwerke; i++));do echo $i; done

bye cry
Member: Backspace
Backspace Dec 02, 2010 at 14:41:14 (UTC)
Goto Top
Hallo,

Danke ersteinmal.

Das Problem mit der Endlosschleife ist weg.


Ein großes Problem ist weiterhin:

wie kann ich die Zeilen 15 und 17 (aus meinem Code) richtig in die For-Schleife packen ?


Danke

Gruß

Backspace
Member: cry
cry Dec 02, 2010 at 15:53:56 (UTC)
Goto Top
Kann es sein, dass Du etwas in der Art haben möchtest:

df -hTP | awk '{print $7 "\t" $6}'  

Und wenn nicht, dann Mach mal ein Beispiel, wie die Ausgabe aussehen soll.

bye cry
Member: Backspace
Backspace Dec 04, 2010 at 19:39:32 (UTC)
Goto Top
Hallo,

Danke erstmal an cry, der Ansatz hat mir weitergeholfen.

Bin jetzt so weit mit der Shelldatei gekommen, leider noch nicht ganz vollständig:

for i in `df -hTP | grep "%" | grep -v cifs | grep -v Typ | wc -l`  

do

        #ausgeben von DRIVE:
        echo `df -hTP | awk '{print $7}'`  

done

for i in `df -hTP | grep "%" | grep -v cifs | grep -v Typ | wc -l`  

do

        #ausgeben von FREESPACE:
        echo `df -hTP | awk '{print $6}'`  
done

        for i in `ifconfig | grep Hardware | awk '{print $6}' | sed -e 's/\n//g'`  

        do

        #ausgeben von MACADDRESS:
        echo `ifconfig | grep Hardware | awk '{print $6}' | sed -e 's/\n//g'`  

done

#       for i in `date '+%d.%m.%Y %X'` 

#       do

        #ausgeben von DATETIMES:
        echo `date '+%d.%m.%Y %X'`  



       for i in ...........?????????????

       do

       wget -O - "http://17x.xx.x.xxx/Ordner/Programm.php?MACADDRESS=${?????}&DRIVE=${?????}&FREESPACE=${?????}&DATETIMES=${?????}&save_data=true  


Mein Problem:

1. wie müssten die ausgelesenen Werte definiert werden, um sie in wget einsetzen zu können und zu übertragen ?
(siehe Fragezeichen in Code)


Danke

Gruß

Backspace
Member: cry
cry Dec 07, 2010 at 16:20:48 (UTC)
Goto Top
#!/bin/bash

# einkommentieren, wenn Du sehen möchtest, was passiert
#set -x

# MAC fuer eth0 auslesen
mac=${ifconfig eth0 | awk '/Hardware Adresse/{print $6}'}  

 
df -hTP | egrep -v "cifs||Type|tmpfs" | while read line  
do
  drive=${echo $line | awk '{print $7}'}  

  # der Prozentwert bei df zeigt den verbrauchten Plattenplatz an nicht den freien
  # free in Prozent, aber ohne %-Zeichen, das ist in einer URL so nicht erlaubt
  free=$((100 - ${echo $line | awk '{gsub(/%/,"",$6);print $6}'}))  

  # die aktuelle Zeit wuerde ich auf dem Server 17x.xx.x.xxx in dem php-script auslesen
  wget -O - "http://17x.xx.x.xxx/Ordner/Programm.php?MACADDRESS=${mac}&DRIVE=${drive}&FREESPACE=${free}&save_data=true  
done 

Ist das in etwa das, was Du machen wolltest?

bye cry