Site icon ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)
Вторник, 27 января, 2026

Linux для сетевых инженеров. Как написать сценарий Bash

Linux для сетевых инженеров. Как написать сценарий Bash

В наших блогах по Linux мы в основном говорим об отдельных командах и о том, как их использовать. Одной из самых мощных возможностей Linux является возможность автоматизации задач с помощью написания программ или сценариев.

Один из самых простых (и легко доступных) способов начать работу с кодированием в Linux — использовать Bash-скрипт. Bash — это язык оболочки, который интерпретирует команды между интерфейсом командной строки и операционной системой. Если вы используете один из самых популярных дистрибутивов Linux (Ubuntu, Debian, Fedora), то, скорее всего, вы раньше использовали Bash. Вы также можете найти его на MacOs и на Windows 10.

Также лучшие советы по настройке Linux/UNIX можно почитать в интернете, информации достаточно.

Мы не собираемся перечислять все циклические или условные операторы, доступные в Bash; Вы можете найти их в Интернете. Вместо этого мы дадим вам краткий шаблон скрипта, который делает что-то, имеющее отношение к сетевой инженерии: скрипт, который периодически запускает тест скорости (скорость загрузки и выгрузки) и сохраняет результаты в файле журнала.

Постановка задачи

Допустим, вы хотите измерять пропускную способность загрузки и выгрузки сети один раз в час и сохранять результаты в файле журнала для анализа. Вы можете получить эти измерения на любом устройстве, зайдя на speedtest.net и выполнив тест. Очевидно, невозможно, чтобы кто-то делал это раз в час и регистрировал результаты для вас.

Для решения этой проблемы нам понадобятся три вещи:

  1. Запустите этот тест пропускной способности в командной строке
  2. Автоматизируйте это через скрипт
  3. Записать результаты в файл

 

Команда Speedtest

Есть несколько способов измерить скорость загрузки и выгрузки. Один из самых простых и простых способов — использовать команду «speedtest-cli», которая является версией командной строки службы Ookla speedtest.net для командной строки. Для установки команды введите:

apt-get install speedtest-cli

Вывод:

~# apt-get install speedtest-cli
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
speedtest-cli
0 upgraded, 1 newly installed, 0 to remove and 146 not upgraded.
Need to get 13.1 kB of archives.
After this operation, 64.5 kB of additional disk space will be used.
Get:1 http://mirror.yandex.ru/ubuntu xenial/universe amd64 speedtest-cli all 0.3.4-1 [13.1 kB]
Fetched 13.1 kB in 0s (301 kB/s)
Selecting previously unselected package speedtest-cli.
(Reading database ... 78919 files and directories currently installed.)
Preparing to unpack .../speedtest-cli_0.3.4-1_all.deb ...
Unpacking speedtest-cli (0.3.4-1) ...
Setting up speedtest-cli (0.3.4-1) ...

 

Вот как выглядит результат команды speedtest:

speedtest-cli
Retrieving speedtest.net configuration...
Retrieving speedtest.net server list...
Testing from JSC Server (213.159.210.167)...
Selecting best server based on latency...
Hosted by MGTS (Moscow) [1.61 km]: 2.856 ms
Testing download speed........................................
Download: 91.34 Mbit/s
Testing upload speed..................................................
Upload: 232.51 Mbit/s

 

Он обнаружил интернет-провайдера (JSC Server) и публичный IP (213.159.xxx.xxx). Затем он обнаружил сервер рядом с MGTS с задержкой 2,856 мс и 1,61 км. А затем он измерил скорость загрузки и выгрузки.

 

Псевдокод

Прежде чем писать какой-либо код, давайте подумаем о логике нашего скрипта. Мы полагаем, что легко понять следующий псевдокод, который соответствует формулировке проблемы выше:

  1. Бесконечный цикл
  2. Запустить speedtest
  3. Результаты журнала в файле
  4. Ждать 1 час
  5. Конец цикла

Скрипт на Bash

Фактический скрипт выглядит так:

#!/bin/bash

while true ;
do
    echo "Speedtest запущен..."
    speedtest-cli --simple >> /home/pi/speedtest.log
    echo "Speedtest остановлен..."
    sleep 3600
done

Давайте разберемся с ним:

Строка 1: это называется шебанг и сообщает операционной системе, какая оболочка используется для команд в сценарии. В данном случае это Bash.

Строка 3: «while» — это конструкция, которая может образовывать циклы. Выполняется ли цикл или нет, зависит от условия после «while». В этом случае мы жестко закодировали это условие в «true», поэтому цикл будет выполняться вечно. В качестве примера другого условия while “while [ “$SECONDS” -lt 3 ];” создает цикл, который запускается до 3 секунд с момента запуска скрипта (в Bash «$ SECONDS» дает истекшие секунды с момента запуска скрипт).

Строка 4: с помощью ключевого слова do мы указываем начало кода, который будет включен в цикл while. Вместе со словом «done» в строке 9 они указывают начало и конец команд, включенных в цикл.

Строка 5: Этот оператор выводит на экран сообщение «Speedtest запущен…». Это сообщение и сообщение «echo «Speedtest остановлен…»» в строке 7 помогают нам узнать, когда Speedtest начинается и заканчивается.

Строка 6: выполняет команду speedtest. Опция «–simple» не показывает подробный вывод, показывать только основную информацию. Таким образом, мы можем скопировать и вставить результаты в электронную таблицу для дальнейшей обработки или построения графиков. Поскольку мы хотим сохранить результаты в файле, мы используем команду добавления «>>», чтобы сохранить результаты в файле «/home/pi/speedtest.log».

Строка 7: она сообщает нам, что speedtest завершен

Строка 8: он спит в течение 3600 секунд, другими словами, он ждет час перед повторным выполнением цикла

Строка 9: определяет конец цикла команд

 

Запуск сценария

Мы сохранили скрипт в файле speedtest.sh (расширение «.sh» часто используется для файлов скриптов Bash).

Для запуска скрипта у вас есть два варианта:

  1. Введите «bash speedtest.sh»
  2. Сделайте скрипт исполняемым файлом и затем запустите его с помощью следующих команд
    1. chmod + x speetest.sh &
    2. ./speedtest.sh &

 

Чтобы скрипт продолжал работать после выхода из системы, необходимо запустить его в фоновом режиме с амперсандом «&» в конце. Если вы не используете амперсанд, сценарий остановится, как только вы выйдете из сеанса командной строки.

 

Результаты

Вот как выглядят сохраненные результаты в файле «/home/pi/speedtest.log»:

Ping: 2.369 ms
Download: 83.55 Mbit/s
Upload: 222.80 Mbit/s
Ping: 2.154 ms
Download: 84.23 Mbit/s
Upload: 223.34 Mbit/s

Давайте объясним каждую строку:

Поле 1 (2.154): задержка

Поле 2 (83.55 Mbit/s): скорость загрузки в мегабит/с

Поле 3 (222.80 Mbit/s): скорость выгрузки в мегабит/с

 

Мы надеемся, что вы найдете этот скрипт полезным и достаточно простым, чтобы попробовать его на своем одном Linux-компьютере. Если у вас есть Raspberry Pi, вы можете заставить его работать, делая что-то полезное. И когда ваш провайдер не предоставляет пропускную способность, за которую вы платите, у вас будут свои инструменты.

Exit mobile version