Anzeige:
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 15 von 16

Thema: Variable in for schleife?

  1. #1
    Registrierter Benutzer
    Registriert seit
    Sep 2006
    Beiträge
    195

    Variable in for schleife?

    Guten morgen Community,

    bin immoment an einem Bash script dran, wo man die IP-adresse eingibt und das script dann die ips scannt und in eine jeweilige txt datei schreibt.

    Gibt es eine möglichkeit, anzuzeigen wieviel % von den IP's online sind?
    also am ende z.B.

    Es sind 43% der IP-Adressen Online.


    Hier das script:

    Code:
    #!/bin/bash
    rm -r ipcheck.
    mkdir ipcheck.
    	read -p "IP-Adresse eingeben ohne punkt am ende! (z.B. 192.168.88): " ip
    	read -p "Anzahl der IP-Adressen: " h
    		for p in $(seq 1 $h)
    		do 
    			read -p "$p. $ip." a
    			echo "$ip.$a" >> ipcheck./ips.txt
    
    		done
    	cat ipcheck./ips.txt | while read ip
    		do
      			ping -w 3 -c 1 $ip
      			[ $? -eq 0 ] && echo $ip >> ipcheck./online2.txt || echo $ip >> ipcheck./offline2.txt
    		done

    Danke schonmal
    AMD Phenom II X6 1100T 6x3,3 gherz
    8GB DDR3-1333 Ram
    Geforce gts 250 1gb ddr3
    bequiet 550W

  2. #2
    Registrierter Benutzer Avatar von drcux
    Registriert seit
    Oct 2003
    Beiträge
    6.989
    In der Pingschleife nen Zähler jedes mal um einen erhöhen, wenn der Ping gelingt. Dann AnzahlIP/100*Zähler.

  3. #3
    Registrierter Benutzer
    Registriert seit
    Sep 2006
    Beiträge
    195
    Ich weiß leider nicht wie ich das in mein Code einfüge, kannst du mir nicht evt sagen wo es geht?
    AMD Phenom II X6 1100T 6x3,3 gherz
    8GB DDR3-1333 Ram
    Geforce gts 250 1gb ddr3
    bequiet 550W

  4. #4
    Registrierter Benutzer
    Registriert seit
    Dec 2003
    Ort
    Dettenhausen
    Beiträge
    22.062
    kamst Du schon mal auf die Idee, ein Buch oder eine Doku bzw. Guide zum Thema Bash-Scripting zu lesen? Der hier und auch Dein letzter Thread zu dem Thema lassen eher vermuten, daß Du Deine Arbeit durch andere erledigen lassen willst...
    Ich bin root - ich darf das.

  5. #5
    Registrierter Benutzer
    Registriert seit
    Sep 2006
    Beiträge
    195
    Zitat Zitat von marce Beitrag anzeigen
    kamst Du schon mal auf die Idee, ein Buch oder eine Doku bzw. Guide zum Thema Bash-Scripting zu lesen? Der hier und auch Dein letzter Thread zu dem Thema lassen eher vermuten, daß Du Deine Arbeit durch andere erledigen lassen willst...
    Im gegensatz zu dir haben mir die "anderen" in dem Thema mir auch wirklich geholfen und nicht nur kritik geäußtert.

    Halt dich bitte aus dem Thema raus, auf deine Kommentare und Kritiken kann ich sehr gut verzichten.
    AMD Phenom II X6 1100T 6x3,3 gherz
    8GB DDR3-1333 Ram
    Geforce gts 250 1gb ddr3
    bequiet 550W

  6. #6
    Registrierter Benutzer
    Registriert seit
    Sep 2006
    Beiträge
    195
    Zitat Zitat von drcux Beitrag anzeigen
    In der Pingschleife nen Zähler jedes mal um einen erhöhen, wenn der Ping gelingt. Dann AnzahlIP/100*Zähler.
    Meinst du vielleicht so?

    Code:
    		do
      			ping -w 3 -c 1 $ip
      			[ $? -eq 0 ] j=$(( $j + 1 )) && echo $ip >> ipcheck./online2.txt || echo $ip >> ipcheck./offline2.txt
    		done
    AMD Phenom II X6 1100T 6x3,3 gherz
    8GB DDR3-1333 Ram
    Geforce gts 250 1gb ddr3
    bequiet 550W

  7. #7
    Registrierter Benutzer Avatar von drcux
    Registriert seit
    Oct 2003
    Beiträge
    6.989
    Wenn es funktioniert...

    Einfacher ist ((j++))

  8. #8
    Registrierter Benutzer
    Registriert seit
    Sep 2006
    Beiträge
    195
    Immer +1 Setzen funktioniert. Aber wie bekomem ich es hin, das nur die erfolgreichen pings +1 gesetzt wird?
    AMD Phenom II X6 1100T 6x3,3 gherz
    8GB DDR3-1333 Ram
    Geforce gts 250 1gb ddr3
    bequiet 550W

  9. #9
    Registrierter Benutzer Avatar von buzz768
    Registriert seit
    Apr 2005
    Ort
    Rostock
    Beiträge
    2.016
    Wenn du abhängig von einer Bedingung mehrere Befehle ausführen willst (hier: Hochzählen und in eine Datei schreiben), dann nimm lieber if .. else. Bei dem Konstrukt mit && und || müsstest du Klammern setzen, wenn alles in eine Zeile soll, das wird leicht unübersichtlich.
    Arch Linux / Intel Z77 / i5-3570K / 8GB PC3-1333 / SAMSUNG SSD 830 128GB

  10. #10
    Linux-Suchti Avatar von roadracer
    Registriert seit
    Feb 2009
    Ort
    Wolfenbüttel
    Beiträge
    759
    Kleine Tipp am Rande:
    Code:
    rm -r ipcheck
    mkdir ipcheck
    würde ich machen, nachdem der User die IPs eingegeben hat. Wenn er nämlich bei read abbricht, sind die Dateien des letzten Mals weg!
    OpenSUSE 12.3 x86 XFCE 4.10

    Alle Rechtschreibfehler unterliegen der GFDL und dürfen so oder in veränderter Form genutzt und weiter gegeben werden.

  11. #11
    Registrierter Benutzer
    Registriert seit
    Sep 2006
    Beiträge
    195
    Funktioniert, danke!

    Code:
    #!/bin/bash
    h=100
    rm -r ipcheck.
    echo "Es wird der Ordner ipcheck. erstellt, wo die txt Dateien abgespeichert werden."
    mkdir ipcheck.
    	read -p "IP-Adresse eingeben ohne punkt am ende! (z.B. 192.168.88): " ip
    	read -p "Anzahl der IP-Adressen: " h
    		for p in $(seq 1 $h)
    		do 
    			read -p "$p. $ip." a
    			echo "$ip.$a" >> ipcheck./ips.txt
    
    		done
    	cat ipcheck./ips.txt | while read ip
        			do
            			ping -c 1 -w 1 $ip
    
            			if [ $? -ne 0 ]
               			 then
               			    echo $ip >> ipcheck./offline.txt
            			    else
    				j=$(( $j + 1))
             			    echo $ip >> ipcheck./online.txt
        			    	fi
    	let G=$h/$h*$j
    	let F=$G*$h
    echo "IP-Adressen in Prozent Online: $F%"
    	    			done
    Jetzt hab ich eine andere Frage, wie kann ich die Variablen ausenen also den abstand:

    var1=10
    var2=100
    abstandvar= 90

    Brauche den wert für die % angabe für ein anderen Script, was z.b. ip 192.168.88.10 - 192.168.88.100 scannt.
    AMD Phenom II X6 1100T 6x3,3 gherz
    8GB DDR3-1333 Ram
    Geforce gts 250 1gb ddr3
    bequiet 550W

  12. #12
    Registrierter Benutzer Avatar von drcux
    Registriert seit
    Oct 2003
    Beiträge
    6.989
    Tipp: 100-10=90

    PS: Deine Prozentrechnung stimmt nicht.

  13. #13
    Registrierter Benutzer
    Registriert seit
    Sep 2006
    Beiträge
    195
    WIeso funktioniert das nicht?
    Also es kommt immer 0% wenn ich f ausgebe.

    Anzahl der IP's (5) durch 100 mal Anzahl der Online IP's

    z.B. 10/100*5 = 0,5
    0,5 * 100 = 50
    50%

    Code:
    #!/bin/bash#!/bin/bash
    u=100
    rm -r ipcheck.
    echo "Es wird der Ordner ipcheck. erstellt, wo die txt Dateien abgespeichert werden."
    mkdir ipcheck.
    	read -p "IP-Adresse eingeben ohne punkt am ende! (z.B. 192.168.88): " ip
    	read -p "Anzahl der IP-Adressen: " h
    		for p in $(seq 1 $h)
    		do 
    			read -p "$p. $ip." a
    			echo "$ip.$a" >> ipcheck./ips.txt
    
    		done
    	cat ipcheck./ips.txt | while read ip
        			do
            			ping -c 1 -w 1 $ip
    
            			if [ $? -ne 0 ]
               			 then
               			    echo $ip >> ipcheck./offline.txt
            			    else
    				j=$(( $j + 1))
             			    echo $ip >> ipcheck./online.txt
        			    	fi
    	let G=$h/$u*$j
    	let F=$G*$u
    echo "IP-Adressen in Prozent Online: $F%"
    	    			done
    u=100
    rm -r ipcheck.
    echo "Es wird der Ordner ipcheck. erstellt, wo die txt Dateien abgespeichert werden."
    mkdir ipcheck.
    	read -p "IP-Adresse eingeben ohne punkt am ende! (z.B. 192.168.88): " ip
    	read -p "Anzahl der IP-Adressen: " h
    		for p in $(seq 1 $h)
    		do 
    			read -p "$p. $ip." a
    			echo "$ip.$a" >> ipcheck./ips.txt
    
    		done
    	cat ipcheck./ips.txt | while read ip
        			do
            			ping -c 1 -w 1 $ip
    
            			if [ $? -ne 0 ]
               			 then
               			    echo $ip >> ipcheck./offline.txt
            			    else
    				j=$(( $j + 1))
             			    echo $ip >> ipcheck./online.txt
        			    	fi
    	let G=$h/$u*$j
    	let F=$G*$u
    echo "IP-Adressen in Prozent Online: $F%"
    	    			done
    AMD Phenom II X6 1100T 6x3,3 gherz
    8GB DDR3-1333 Ram
    Geforce gts 250 1gb ddr3
    bequiet 550W

  14. #14
    Registrierter Benutzer Avatar von drcux
    Registriert seit
    Oct 2003
    Beiträge
    6.989
    Oben hast du "G=$h/$h*$j":

    $h/$h macht ja wohl keinen Sinn.

  15. #15
    Registrierter Benutzer Avatar von buzz768
    Registriert seit
    Apr 2005
    Ort
    Rostock
    Beiträge
    2.016
    Zitat Zitat von xJAMESx Beitrag anzeigen
    z.B. 10/100*5 = 0,5
    In bash lässt sich nur mit ganzen Zahlen rechnen, bei Division werden Kommastellen abgeschnitten (10/100=0). Folgendes würde als Näherung gehen
    Code:
    let F=100*$j/$h;
    Soll es genauer sein, kannst du bc zur Hilfe nehmen:
    Code:
    echo "scale=2; 100*$j/$h" | bc
    Arch Linux / Intel Z77 / i5-3570K / 8GB PC3-1333 / SAMSUNG SSD 830 128GB

Ähnliche Themen

  1. Perl - OTRS
    Von DBGTMaster im Forum Anwendungen Allgemein, Software
    Antworten: 8
    Letzter Beitrag: 03.12.07, 15:29
  2. wine kompiliere probleme
    Von ml im Forum Virtuelle Maschinen und Emulatoren
    Antworten: 0
    Letzter Beitrag: 23.01.04, 18:21
  3. Nächstes Problem mit Transcode
    Von shanti im Forum Kompilieren von Kernel und Sourcen
    Antworten: 4
    Letzter Beitrag: 28.04.02, 00:57
  4. automake-upate
    Von Eremit im Forum Anwendungen Allgemein, Software
    Antworten: 2
    Letzter Beitrag: 18.02.02, 13:56
  5. WAMP - WAMP - MySQL/PHP will nicht so recht
    Von HeighT im Forum Linux als Server
    Antworten: 6
    Letzter Beitrag: 10.02.02, 15:28

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •