Logic: Speed=Size/time (MB/s)
Step 1: Create a blank file of some size, say 10MB.
Step 2: Transfer this file to the server for which we want to find out speed
Step 3: Binary operation to get speed i.e divide size by time.
Step4: Repeat steps 2 and 3, 10 times and then take average of 3 best iterations:
Script:
#!/bin/bash
file_size=10
SERVER= ### Put server name here
### Create file of “$file_size”MB
if [ ! -f /opt/speedtestfile_"$file_size"MB ]
then
dd if=/dev/zero of=/opt/speedtestfile_”$file_size”MB bs=1024k count=”$file_size”
fi
##### Test upload speed 10 times #####
for (( i=0; i<10; i++))
do
/usr/bin/time -f %e -o /opt/real.log scp /opt/speedtestfile_”$file_size”MB $SERVER:/opt/speedtestfile_”$file_size”MB
real=$(cat /opt/real.log)
upspeed=$(echo “scale=3;”$file_size”/$real” | bc)
echo $upspeed >> /opt/upload.log
done
###### To sort best 3 iterations #######
cat /opt/upload.log | sort -r | head -n 3 > /opt/upload_new.log
#### calculate average Upload speed ####
upsum=0
un=0
for u in `cat /opt/upload_new.log`
do
upsum=`echo $upsum + $u|bc`
if [ "$?" -eq "0" ]; then
un=`expr $un + 1`
fi
done
upload_average=$(echo “scale=3;$upsum/$un” | bc)
###### find download speed 10 times #####
echo “Download speed test for Server_name”
for (( i=0; i<10; i++))
do
/usr/bin/time -f %e -o /opt/dreal.log scp $SERVER:/opt/speedtestfile_”$file_size”MB /opt/speedtestfile_”$file_size”MB
dreal=$(cat /opt/dreal.log)
downspeed=$(echo “scale=3;”$file_size”/$dreal” | bc)
echo $downspeed >> /opt/download.log
done
### To sort best 3 iterations #####
cat /opt/download.log | sort -r | head -n 3 > /opt/download_new.log
#### To calculate average of 3 iterations ####
downsum=0
dn=0
for d in `cat /opt/download_new.log`
do
downsum=`echo $downsum + $d|bc`
if [ "$?" -eq "0" ]; then
dn=`expr $dn + 1`
fi
done
download_average=$(echo “scale=3;$downsum/$dn” | bc)
echo -e “\nServer upload speed: $upload_average”
echo -e “\nServer Download Speed: $download_average”
