Speedtest Bash Script Linux

A simple benchmark script that shows download and upload speed for multiple locations around the world, CPU speed, and I/O write speed.


The motivation behind this speedtest project is to give you a full picture of your network capabilities. A server serves content, which means the upload speed is extremely important and should not be neglected in a network benchmark test. Using standard utilities in Linux that people are familiar with, this network speed test should be a good base line and works well on minimalistic systems.


You can run the benchmark script using one of the following commands:

wget dl.getipaddr.net/speedtest.sh -q -O- | bash


curl -s dl.getipaddr.net/speedtest.sh -o- | bash


wget https://raw.github.com/blackdotsh/curl-speedtest/master/speedtest.sh && chmod u+x speedtest.sh && bash speedtest.sh

Note: A 100MB test file is used by default to test the download and upload speeds, however, in some “exotic” locations, a 10MB file is used to save bandwidth.

How to interprete the results

Since most of these test servers are on a shared port, one of the servers in a certain location might not produce accurate results. However, if the speedtest script shows lower than expected values from a few of the speedtest servers, then it’s more than likely that your server has slow download / upload speed. Running it a few times helps too (but running it 10 consecutive times will not).

Checksums SHA-1

9dcbbaf1700ad124967bb045764864fa10b207b5  speedtest.Asia.sh
c5250094faf71dc92a65c6215ce09022597fb789  speedtest.AU.sh
a030694abae32695cdc2ea6b7b26ecd36f411dcf  speedtest.EU.sh
77760985bd016ec978b0ac0e9f17a2ea84149009  speedtest.NA.sh
9ab4662f599e60d56097c729907612ccd0e122fe  speedtest.sh

Another speedtest script



pip / easy_install

pip install speedtest-cli


easy_install speedtest-cli


pip install git+https://github.com/sivel/speedtest-cli.git


git clone https://github.com/sivel/speedtest-cli.git
python speedtest-cli/setup.py install

Just download (Like the way it used to be)

wget -O speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py
chmod +x speedtest-cli


curl -Lo speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py
chmod +x speedtest-cli


$ speedtest-cli -h
usage: speedtest-cli [-h] [--no-download] [--no-upload] [--bytes] [--share]
                     [--simple] [--csv] [--csv-delimiter CSV_DELIMITER]
                     [--csv-header] [--json] [--list] [--server SERVER]
                     [--mini MINI] [--source SOURCE] [--timeout TIMEOUT]
                     [--secure] [--no-pre-allocate] [--version]

Command line interface for testing internet bandwidth using speedtest.net.

optional arguments:
  -h, --help            show this help message and exit
  --no-download         Do not perform download test
  --no-upload           Do not perform upload test
  --bytes               Display values in bytes instead of bits. Does not
                        affect the image generated by --share, nor output from
                        --json or --csv
  --share               Generate and provide a URL to the speedtest.net share
                        results image, not displayed with --csv
  --simple              Suppress verbose output, only show basic information
  --csv                 Suppress verbose output, only show basic information
                        in CSV format. Speeds listed in bit/s and not affected
                        by --bytes
  --csv-delimiter CSV_DELIMITER
                        Single character delimiter to use in CSV output.
                        Default ","
  --csv-header          Print CSV headers
  --json                Suppress verbose output, only show basic information
                        in JSON format. Speeds listed in bit/s and not
                        affected by --bytes
  --list                Display a list of speedtest.net servers sorted by
  --server SERVER       Specify a server ID to test against
  --mini MINI           URL of the Speedtest Mini server
  --source SOURCE       Source IP address to bind to
  --timeout TIMEOUT     HTTP timeout in seconds. Default 10
  --secure              Use HTTPS instead of HTTP when communicating with
                        speedtest.net operated servers
  --no-pre-allocate     Do not pre allocate upload data. Pre allocation is
                        enabled by default to improve upload performance. To
                        support systems with insufficient memory, use this
                        option to avoid a MemoryError
  --version             Show the version number and exit

Python API

See the wiki.


It is not a goal of this application to be a reliable latency reporting tool.

Latency reported by this tool should not be relied on as a value indicative of ICMP style latency. It is a relative value used for determining the lowest latency server for performing the actual speed test against.

There is the potential for this tool to report results inconsistent with Speedtest.net. There are several concepts to be aware of that factor into the potential inconsistency:

  1. Speedtest.net has migrated to using pure socket tests instead of HTTP based tests
  2. This application is written in Python
  3. Different versions of Python will execute certain parts of the code faster than others
  4. CPU and Memory capacity and speed will play a large part in inconsistency between Speedtest.net and even other machines on the same network

Issues relating to inconsistencies will be closed as wontfix and without additional reason or context.

Leave a Reply