Написання shell-скриптів в OpenWrt

Стандартний інтерпретатор команд у OpenWrt — це Almquist shell, більш відомий як ash. Це також стандартний shell, що постачається у складі BusyBox. У більшості дистрибутивів Linux, таких як Ubuntu чи Debian, використовується bash, який є набагато більшим і складнішим за ash. Наприклад, bash займає приблизно 1 МБ на диску — що є надмірним для вбудованих пристроїв.

Натомість BusyBox займає менше 512 КБ і окрім shell'а ash містить багато інших корисних утиліт. Наприклад: awk, grep, sed та vi/vim. Зверніть увагу, що навіть заводські прошивки багатьох роутерів використовують BusyBox із тих же міркувань — економія пам’яті та простору.

Прошивка OpenWrt використовує BusyBox через його надзвичайну ефективність — як за об’ємом у RAM, так і за кількістю функцій. Але пам’ятайте, що деякі утиліти BusyBox можуть бути обмеженими порівняно з їхніми «повноцінними» аналогами на ПК.

Втім, bash і ash досить подібні для більшості базових сценаріїв. Якщо ваш скрипт використовує лише POSIX-сумісні конструкції, він має працювати й у ash.


Питання: Чи можу я встановити повноцінний Bash або інші Linux CLI-інструменти, включаючи мій улюблений редактор?

Відповідь: Так! (але є нюанси)

Якщо ваш роутер підтримує USB-накопичувачі і ви налаштуєте зовнішній диск, ви отримаєте більше місця для встановлення програм. Після цього ви зможете легко встановити пакет bash.

OpenWrt також має пакети повноцінних coreutils: basename, cat, rm, sort, sleep тощо.

Список усіх CLI-пакетів: категорія Utilities (пошукайте за `coreutils`).

Серед редакторів доступні: nano, vim, vim-full, vim-fuller

УВАГА: НЕ встановлюйте vim-пакети, якщо ви не маєте USB-накопичувача!

Наприклад, `vim-fuller` займає ~2.8 МБ — і ще більше після встановлення.


Скрипти в OpenWrt повинні починатися з рядка:

#!/bin/sh

Використання `#!/bin/bash` не працюватиме. Детальніше: оператор shebang


Коротка відповідь — можна, але не рекомендується.

⚠️ Попередження: Якщо ви зміните `/etc/passwd`, щоб встановити для root shell, відмінний від `/bin/sh`, ви майже напевно втратите доступ по SSH до пристрою!

Якщо bash встановлено, ви можете вручну запускати `bash` після входу в систему, не змінюючи стандартний shell. Це набагато безпечніше.

У разі проблем із доступом по SSH — див. режим відновлення (failsafe).


Напишіть свій скрипт із заголовком `#!/bin/sh` та перевірте його на https://www.shellcheck.net/ Цей сервіс підкаже, які функції не сумісні з OpenWrt/ash. Деталі: https://github.com/koalaman/shellcheck/blob/master/README.md#portability


Установки OpenWrt — мінімальні, тому деякі команди можуть бути недоступні.

Перевірте наявність інструмента командою:

type назва_команди

Приклад:

# type time
time is /usr/bin/time

Список усіх доступних утиліт шукайте в розділі Packages → Utilities.


Див. також: Конфігурація в скриптах

  • Last modified: 2025/05/25 18:12
  • by vazaz