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

Эта задача — шаг 30 курса «Bash-скрипты: от цикла до надёжного скрипта»

Скрипт подсчёта размера: ноль замечаний

средне~7 мин

Скрипт /root/dirsize.sh дописывает в /var/reports/summary.log строку <каталог>: <N> bytes для каталога из первого аргумента. На каталоге с пробелом в имени (/srv/my data) он ломается, а shellcheck находит в нём несколько замечаний. Исправь все, чтобы shellcheck молчал, а скрипт работал и на таких путях. Открой скрипт во вкладке «Редактор» над терминалом.

Что потренируешь:
  • shellcheck
  • квотирование
  • $( )
  • cd || exit
  • пробелы в путях

Разбор темы

Замечания shellcheck независимы, и в одном скрипте их обычно несколько — разбирать их стоит по списку, по коду SCxxxx. Самое частое — подстановка переменной без кавычек: путь с пробелом после неё становится двумя аргументами, и команда работает не с тем файлом. Устаревшие обратные кавычки заменяются на $( … ), который читается проще и вкладывается без экранирования. А cd без проверки опасен: если каталога нет, скрипт продолжит работать там, где был, и запишет файлы не туда. Чистый вывод shellcheck — не самоцель, а признак, что эти краевые случаи закрыты.

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

  1. shellcheck без замечаний
  2. скрипт работает с пробелом в пути

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