Практическое задание

Эта задача — шаг 9 курса «Чистые скрипты: shellcheck»

Строгий скрипт без замечаний

средне~8 мин

Напиши /root/words.sh в строгом режиме set -euo pipefail, к которому shellcheck не придерётся. Без аргумента скрипт печатает в stderr строку, начинающуюся с usage:, и выходит с кодом 64. С путём к файлу — печатает только число слов в нём; путь может содержать пробелы. Скрипт удобно писать во вкладке «Редактор» над терминалом, а shellcheck запускать в терминале.

Что потренируешь:
  • set -euo pipefail
  • $#
  • коды возврата
  • stderr
  • shellcheck

Разбор темы

Надёжный скрипт проверяет входные данные до того, как начнёт работать. В строгом режиме это особенно важно: из-за set -u обращение к несуществующему $1 роняет скрипт с невнятной ошибкой и кодом 1, поэтому число аргументов ($#) проверяют первым делом. Сообщение об использовании идёт в stderr (>&2), чтобы не смешиваться с полезным выводом, а код выхода 64 — традиционный EX_USAGE из sysexits.h, по которому вызывающий отличит «неправильно вызвали» от «упало по дороге». Пути берут в двойные кавычки — и shellcheck следит, чтобы об этом не забыли.

Что проверяется

  1. строгий режим и ноль замечаний shellcheck
  2. без аргумента: usage в stderr и код 64
  3. считает слова в файле с пробелом в имени

Как это выглядит