Linux Labs

Bash: обработка текста и скрипты / Ступень 5 из 9

Аргументы, кавычки и проверка файлов

Не запущена Запускается обычно ~20 с
Выйти из урока

Шаг 6 из 7 · лаба · 25 минсредняя

Почини скрипт отчёта

Скрипт проверки выгрузок пропускает пустые файлы, режет имена и прячет сбои — доведи его до договора.

Ситуация

Каждую ночь филиалы присылают выгрузки в ~/import/inbox, и загрузчик забирает их в базу. Перед загрузкой он запускает проверку и начинает, только если она вернула код 0:

bash report.sh inbox/*.csv && import-uploads inbox/*.csv

Скрипт ~/import/report.sh написал коллега, договор записан в шапке скрипта. Утром ты смотришь вывод ночной проверки: строк в нём больше, чем выгрузок, пустая east.csv прошла как OK, а загрузка началась, хотя FAIL в выводе есть.

Задача

Исправь ~/import/report.sh так, чтобы он выполнял договор:

  1. на каждый аргумент — ровно одна строка в stdout, в том же порядке: OK <аргумент> или FAIL <аргумент>; аргумент — ровно как передан, даже с пробелом или звёздочкой * в имени; в stderr при этом ничего;
  2. OK — только если это обычный файл (или ссылка на него), его можно прочитать и он не пуст; иначе FAIL;
  3. код завершения 1, если хоть один файл получил FAIL, где бы он ни стоял, и 0, если все OK;
  4. без аргументов — пустой stdout, в stderr строка Usage: report.sh FILE... и код 2.

Проверка запускает скрипт от твоего имени — bash ~/import/report.sh … — на своих файлах, которых в inbox нет. Выгрузки в inbox — для твоих опытов: чини скрипт, а не их.

Лаба · самостоятельно

Команды в этой лабе не даны: набирай их в терминале сам. Цели проверяются на машине после каждой команды.

Цели

0 из 4
  • На каждый аргумент — одна строка с именем ровно как передано, даже с пробелом или звёздочкой; stderr пуст — ещё не выполнена
  • OK — только у обычного непустого файла, который можно прочитать, или у ссылки на такой файл — ещё не выполнена
  • Код 1, если не прошёл хоть один файл, где бы он ни стоял; код 0, если прошли все — ещё не выполнена
  • Без аргументов — пустой stdout, строка Usage в stderr и код 2 — ещё не выполнена
Ctrl+Enter
Запустит машину node1 · Ubuntu 24.04

Машина запускается

Подсказки

0 из 3

Цели лабы

0 из 4
  • На каждый аргумент — одна строка с именем ровно как передано, даже с пробелом или звёздочкой; stderr пуст — ещё не выполнена
  • OK — только у обычного непустого файла, который можно прочитать, или у ссылки на такой файл — ещё не выполнена
  • Код 1, если не прошёл хоть один файл, где бы он ни стоял; код 0, если прошли все — ещё не выполнена
  • Без аргументов — пустой stdout, строка Usage в stderr и код 2 — ещё не выполнена
node1 Ubuntu 24.04

Цели лабы

0 из 4
  • На каждый аргумент — одна строка с именем ровно как передано, даже с пробелом или звёздочкой; stderr пуст — ещё не выполнена
  • OK — только у обычного непустого файла, который можно прочитать, или у ссылки на такой файл — ещё не выполнена
  • Код 1, если не прошёл хоть один файл, где бы он ни стоял; код 0, если прошли все — ещё не выполнена
  • Без аргументов — пустой stdout, строка Usage в stderr и код 2 — ещё не выполнена
Загрузка…