#! /bin/bash ######################################################################### ## ## Name: Speedtest ## Aufruf: ./self_speedtest ... ## Author: Patrick Schindelmann ## Version: v0.1 ## Erstellt: 24.03.10 ## Beschreibung:Programm prüft die Hosts, ob Sie Linux oder Windows- ## Maschinen sind. Bei den Linuxrechner wird ein ## Geschwindigkeitstest ausgeführt ## ######################################################################### if [ `id -u` = "0" ] then if [ $# -eq 0 ] then echo Falscher Aufruf echo -e "\n\tusage: `basename $0` [host1]...[hostn]\n" exit 1 fi #Pfad für die Datei, die bei der Geschwindigkeitsprüfung kopiert wird reffile=/usr/local/bin/datei # Parameter 1 #hostname=$1 # Variable fuer alle uebergebenen Hosts hosts=$* # Variable mit der Versionsnummer von SIRA-Systemen # sira_version=10.3 # Variable mit der Versionsnummer von KORA-Systemen # kora_version=10.2 status_error=0 #status_error_rechner="0" status_erfolgreich=0 # Zeitvariablen zur errechnung der Übertragungszeit v_zeitdiff="" v_zeitstart="" v_zeitstop="" # Variable, fuer die Größe des erzeugten Files size="" #Übertragungszeit (mit Punkt getrennt) zeit_mp="" #Funktion, um eine Datei von 50MB zu erzeugen # Diese Datei enthält nur Nullen und wird bei Programmende wieder gelöscht # Die Größe der Datei kann über count (Wert in in kb; 50mb=51200kb) bestimmt werden function f_createfile(){ echo "erstelle Referenzfile..." /bin/dd if=/dev/zero of=$reffile bs=1024 count=51200 > /dev/null 2>&1 if [ -e $reffile ] then echo -e "Referenzfile wurde erstellt\n" else echo "Referenzfile wurde nicht gefunden" exit 1 fi } function f_size(){ sizeohne=`ls -l $reffile | cut -d" " -f5` size=`echo "$sizeohne/1024/1024" | bc` # size=`ls -l $reffile | cut -d" " -f5` } function f_zeitbegin(){ v_zeit=`date +%s%N` v_zeitstart=${v_zeit:0:13} # v_zeitstart=${v_zeit:8:5} } function f_zeitende(){ v_zeit=`date +%s%N` v_zeitstop=${v_zeit:0:13} # v_zeitstop=${v_zeit:8:5} } function f_transfer(){ /usr/bin/scp -q $reffile root@$hostname:/tmp } function f_transfer_rm(){ /usr/bin/ssh root@$hostname rm /tmp/datei } function f_berechnung(){ (( zeitdiff = $v_zeitstop - $v_zeitstart )) if [ $zeitdiff -lt 1000 ] then zeit=0,${zeitdiff: -3} zeit_mp=0.${zeitdiff: -3} # echo $zeit elif [ $zeitdiff -gt 999 -a $zeitdiff -lt 10000 ] then zeit=${zeitdiff:0:1},${zeitdiff: -3} zeit_mp=${zeitdiff:0:1}.${zeitdiff: -3} # echo $zeit elif [ $zeitdiff -gt 9999 ] then zeit=${zeitdiff:0:2},${zeitdiff: -3} zeit_mp=${zeitdiff:0:2}.${zeitdiff: -3} # echo $zeit fi echo -e "\tZeit in Sekunden: $zeit" } function f_berechnung_rate(){ f_size # echo "test: zeitmp: $zeit_mp" # echo "test: size : $size" durchsatz=`echo "scale=4; $size/$zeit_mp" | bc` echo -e "\tGeschwindigkeit: $durchsatz MB/s" } echo f_createfile #setzen des SeperierungsZeichen, damit auch Listen in Form von host1,host2,host3 geprüft werden können IFS=$', \t\n' for hostname in $hosts do echo -e "Pruefe $hostname:" host_ttl=`/bin/ping -c1 $hostname 2>/dev/null| grep from | cut -d"=" -f3 | cut -d" " -f1` if [ -z $host_ttl ] then echo -e "\t########## Host $hostname nicht ping-bar ##########" (( status_error++ )) if [ $status_error -gt 1 ] then status_error_rechner="$status_error_rechner, $hostname" else status_error_rechner="$status_error_rechner $hostname" fi else if [ $host_ttl -ge 120 -a $host_ttl -le 130 ] then echo -e "\t$hostname:\tWindows" (( status_error++ )) if [ $status_error -gt 1 ] then status_error_rechner="$status_error_rechner, $hostname" else status_error_rechner="$status_error_rechner $hostname" fi else if [ $host_ttl -ge 60 -a $host_ttl -le 70 ] then #echo "erstelle File" #f_createfile #echo "beginn Zeitrechnung" f_zeitbegin #echo "Transfer" f_transfer #echo "ende Zeitrechnung" f_zeitende #echo "Zeitberechnung" f_berechnung f_berechnung_rate #echo $zeitdiff f_transfer_rm (( status_erfolgreich++ )) else echo "Rechner falsch konfiguriert (falsche TTL)" fi # (( status_erfolgreich++ )) fi fi done echo -e "\n\t Statusreport" echo -e "\t--------------" echo -e "\tErfolgreich:\t $status_erfolgreich" echo -e "\tFehler:\t\t $status_error" if [ $status_error -gt 0 ] then echo -e "\tPC mit Fehler: \t$status_error_rechner" fi echo -e "\n" # Referenzfile löschen auf dem ausführendem System rm $reffile else echo "Programm muss als root ausgeführt werden" exit 1 fi