Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

For Schleife in Shelldatei

Frage Entwicklung Batch & Shell

Mitglied: Backspace

Backspace (Level 1) - Jetzt verbinden

02.12.2010, aktualisiert 12:17 Uhr, 2164 Aufrufe, 5 Kommentare

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:

01.
#!/bin/sh 
02.
 
03.
AnzahlLaufwerke=`df -hT | grep "%" | grep -v cifs | grep -v Typ | wc -l` 
04.
 
05.
#obere Zeile: Filterung nach bestimmten Laufwerken 
06.
 
07.
 
08.
$AnzahlLaufwerke=AnzahlLaufwerke; 
09.
 
10.
  for ((i=1; i=$AnzahlLaufwerke; i++)); 
11.
 
12.
  do echo 
13.
14.
 
15.
  "Laufwerk=`df -hT | grep -v Dateisystem | grep -v server_share | grep -v mapper | awk '{print $NF}' | sed -n 'p'`"; 
16.
 
17.
  "FreierSpeicher=`df -hT | grep -v Dateisystem | grep -v server_share | grep -v mapper | awk '{print $(NF-1)}' | sed -n 'p'`"; 
18.
 
19.
  }; 
20.
 
21.
  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
Mitglied: cry
02.12.2010 um 14:28 Uhr
Zitat von Backspace:
01.
>   for ((i=1; i=$AnzahlLaufwerke; i++)); 
02.
> 

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

01.
AnzahlLaufwerke=3 
02.
for ((i=1; i<=$AnzahlLaufwerke; i++));do echo $i; done
bye cry
Bitte warten ..
Mitglied: Backspace
02.12.2010 um 15:41 Uhr
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
Bitte warten ..
Mitglied: cry
02.12.2010 um 16:53 Uhr
Kann es sein, dass Du etwas in der Art haben möchtest:

01.
df -hTP | awk '{print $7 "\t" $6}'
Und wenn nicht, dann Mach mal ein Beispiel, wie die Ausgabe aussehen soll.

bye cry
Bitte warten ..
Mitglied: Backspace
04.12.2010 um 20:39 Uhr
Hallo,

Danke erstmal an cry, der Ansatz hat mir weitergeholfen.

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

01.
for i in `df -hTP | grep "%" | grep -v cifs | grep -v Typ | wc -l` 
02.
 
03.
do 
04.
 
05.
        #ausgeben von DRIVE: 
06.
        echo `df -hTP | awk '{print $7}'` 
07.
 
08.
done 
09.
 
10.
for i in `df -hTP | grep "%" | grep -v cifs | grep -v Typ | wc -l` 
11.
 
12.
do 
13.
 
14.
        #ausgeben von FREESPACE: 
15.
        echo `df -hTP | awk '{print $6}'` 
16.
done 
17.
 
18.
        for i in `ifconfig | grep Hardware | awk '{print $6}' | sed -e 's/\n//g'` 
19.
 
20.
        do 
21.
 
22.
        #ausgeben von MACADDRESS: 
23.
        echo `ifconfig | grep Hardware | awk '{print $6}' | sed -e 's/\n//g'` 
24.
 
25.
done 
26.
 
27.
#       for i in `date '+%d.%m.%Y %X'` 
28.
 
29.
#       do 
30.
 
31.
        #ausgeben von DATETIMES: 
32.
        echo `date '+%d.%m.%Y %X'` 
33.
 
34.
 
35.
 
36.
       for i in ...........????????????? 
37.
 
38.
       do 
39.
 
40.
       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
Bitte warten ..
Mitglied: cry
07.12.2010 um 17:20 Uhr
01.
#!/bin/bash 
02.
 
03.
# einkommentieren, wenn Du sehen möchtest, was passiert 
04.
#set -x 
05.
 
06.
# MAC fuer eth0 auslesen 
07.
mac=${ifconfig eth0 | awk '/Hardware Adresse/{print $6}'} 
08.
 
09.
  
10.
df -hTP | egrep -v "cifs||Type|tmpfs" | while read line 
11.
do 
12.
  drive=${echo $line | awk '{print $7}'} 
13.
 
14.
  # der Prozentwert bei df zeigt den verbrauchten Plattenplatz an nicht den freien 
15.
  # free in Prozent, aber ohne %-Zeichen, das ist in einer URL so nicht erlaubt 
16.
  free=$((100 - ${echo $line | awk '{gsub(/%/,"",$6);print $6}'})) 
17.
 
18.
  # die aktuelle Zeit wuerde ich auf dem Server 17x.xx.x.xxx in dem php-script auslesen 
19.
  wget -O - "http://17x.xx.x.xxx/Ordner/Programm.php?MACADDRESS=${mac}&DRIVE=${drive}&FREESPACE=${free}&save_data=true 
20.
done 
Ist das in etwa das, was Du machen wolltest?

bye cry
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
gelöst Verschachtelte FOR-Schleife mit einem Argument (3)

Frage von mp-home zum Thema Batch & Shell ...

Batch & Shell
gelöst Fehler in Schleife (2)

Frage von miczar zum Thema Batch & Shell ...

Batch & Shell
For Schleife in einer .sh Datei (4)

Frage von CrystalFlake zum Thema Batch & Shell ...

Batch & Shell
Zwei Ergänzungen in einer For Schleife

Frage von charmeur zum Thema Batch & Shell ...

Neue Wissensbeiträge
LAN, WAN, Wireless

Schwachstelle im WPA2 Protokoll veröffentlicht

(3)

Information von colinardo zum Thema LAN, WAN, Wireless ...

Heiß diskutierte Inhalte