PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [BASH] Progressbar in for-Schleife


nalye
2011-08-31, 14:14:28
Hab gerade einen Knoten im Hirn... Ich habe folgendes Script:


#!/bin/bash

/bin/echo "Teil der MAC-Adresse?"
read MACPART

for i in $(seq 255);
do
/bin/echo 192.168.30.$i
/usr/bin/arping -c 1 192.168.30.$i|/bin/grep -i $MACPART > /dev/null && /usr/bin/host 192.168.30.$i \
|/bin/sed -e "s/$i.30.168.192.in-addr.arpa domain name pointer //g" \
|/bin/sed -e "s/local./local/g" \
|| /bin/echo "..."

done

unset $MACPART


und hätte derweilen gerne eine Progressbar.

Die funktioniert ja an sich auch:


#!/bin/bash

{ for I in $(seq 1 100) ; do
echo $I
sleep 0.01
done
echo 100; } | dialog --backtitle "Vorwaerts immer - rueckwaerts nimmer!" \
--gauge "Fortschritt" 6 60 0


Aber wie zur Hölle kriege ich den Fortschrittsbalken in die for-Schleife eingebaut? Da scheitere ich gerade ein wenig :(

nalye
2011-09-01, 12:07:48
Sodele, hab´s hinbekommen...

Coda
2011-09-01, 13:50:04
Und was war die Lösung? Vielleicht interessiert es ja sonst noch jemanden.

nalye
2011-09-01, 14:11:54
Klar, hier die Lösung (Bitte die Variablennamen nicht beachten ;) - Testscript)


#!/bin/bash

MACGEFUNDEN="$(mktemp)"

dialog --title "Inputbox zum Suchen von MAC-Adressen" \
--backtitle "Dr Guttenbergs Kopierpaste" \
--inputbox "Bitte den Teil der MAC eingeben" 8 60 2>/tmp/input.$$

sel=$?

MACPART=`/bin/cat /tmp/input.$$`

case $sel in
0) /bin/echo "Danke" ;;
1) /bin/echo "Cancel"
exit;;
255) /bin/echo "[ESCAPE]"
exit;;
esac

/bin/echo "" > $MACGEFUNDEN

{ for i in $(seq 100);
do
/bin/echo $i
/usr/bin/arping -c 1 192.168.30.$i|/bin/grep -i $MACPART > /dev/null && /usr/bin/host 192.168.30.$i \
|/bin/sed -e "s/$i.30.168.192.in-addr.arpa domain name pointer /192.168.30.$i /g" \
|/bin/sed -e "s/local./local/g" >> $MACGEFUNDEN \
|| /bin/echo "..."
sleep 0.01


done

/bin/echo 100; } | dialog --backtitle "Vorwaerts immer - rueckwaerts nimmer!" \
--gauge "Suche..." 6 60 0

unset $MACPART

/usr/bin/clear

/bin/cat $MACGEFUNDEN

/bin/rm -f $MACGEFUNDEN

/bin/rm -f $MACPART

/bin/rm -f /tmp/input.$$

sei laut
2011-09-01, 18:05:53
Mein Kopf ist momentan alles andere als klar, aber deine For-Schleife sucht nur IP bis .100, nicht bis .255 - eben weil deine Progressbar nur bis 100 geht. Oder überseh ich was?
Für eine richtige Progressbar müsstest du in jeden 2,55. Durchlauf den Fortschritt anzeigen. Mir fällt da spontan nämlich keine Lösung zu ein.

nalye
2011-09-01, 20:20:16
Ja, die läuft erstmal nur bis 100. Ist soweit richtig, als dass ich das noch anpassen muss...

Mr. Lolman
2011-09-02, 06:50:31
"i*100/255" müsst doch gehen. wenn man den gleichen Prozentwert nicht mehrfach anzeigen lassen will, müssts eigentlich so klappen (Pseudocode):


"if ((i*100/255)>((i-1)*100/255)) {echo i*100/255}"