Написання 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.


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

This website uses cookies. By using the website, you agree with storing cookies on your computer. Also you acknowledge that you have read and understand our Privacy Policy. If you do not agree leave the website.More information about cookies
  • Last modified: 2025/05/25 18:12
  • by vazaz