Передача параметров через командную строку делает скрипт более гибким и переносимым. Это позволяет запускать скрипт с разными аргументами, не изменяя сам скрипт.

Использование `getopts` для обработки параметров

Команда `getopts` – стандартный способ обработки параметров командной строки в bash. Она позволяет определить ожидаемые аргументы и извлекать их значения.

Пример скрипта с обработкой параметров

#!/bin/bash

  # Определение переменных по умолчанию
  DIRECTORY="."
  PATTERN="*.txt"
  LOG_FILE="cleanup.log"

  # Обработка параметров командной строки
  while getopts "d:p:l:" opt; do
    case "$opt" in
      d)
        DIRECTORY="$OPTARG"
        ;;
      p)
        PATTERN="$OPTARG"
        ;;
      l)
        LOG_FILE="$OPTARG"
        ;;
      \?)
        echo "Недопустимый параметр: -$OPTARG" >&2
        exit 1
        ;;
      :)
        echo "Параметр -$OPTARG требует аргумент." >&2
        exit 1
        ;;
    esac
  done

  # Сдвиг аргументов, чтобы избежать повторного включения их в find
  shift $((OPTIND - 1))

  # Логирование (основная часть скрипта, которая была в предыдущем примере)
  log() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG_FILE"
  }

  log "Скрипт очистки файлов запущен."

  find "$DIRECTORY" -name "$PATTERN" -print0 | while IFS= read -r -d $'\0' file; do
    log "Удаление файла: $file"
    rm -f "$file"
  done

  log "Скрипт очистки файлов завершен."
  

Объяснение кода:

  • `DIRECTORY="."`, `PATTERN="*.txt"`, `LOG_FILE="cleanup.log"`: Установка значений по умолчанию для параметров. Точка (".") означает текущую директорию.
  • `getopts "d:p:l:" opt`: `getopts` обрабатывает аргументы командной строки. Опции "d", "p" и "l" ожидают аргументы (обозначено двоеточием ":").
  • `case "$opt" in ... esac`: Обрабатывает каждую опцию. `OPTARG` содержит значение аргумента.
  • `shift $((OPTIND - 1))`: Удаляет обработанные аргументы из списка аргументов, чтобы избежать их повторного включения в find. Это важно, если вы передаете дополнительные аргументы в `find`, например, другие фильтры.
  • `log()` : Функция логирования (остается без изменений)

Использование скрипта

Примеры запуска скрипта:

  • `./cleanup.sh -d /home/user/documents -p "*.pdf" -l mylog.txt`: Указывает директорию `/home/user/documents`, шаблон `*.pdf` и лог-файл `mylog.txt`.
  • `./cleanup.sh -p "*.jpg"`: Указывает шаблон `*.jpg` (директория по умолчанию - текущая).
  • `./cleanup.sh -d /var/log`: Указывает директорию `/var/log` (шаблон по умолчанию - `*.txt`).

Рекомендации

  • Всегда предоставляйте значения по умолчанию для параметров, чтобы скрипт работал даже без аргументов.
  • Документируйте доступные параметры и их значения по умолчанию. Можно добавить в скрипт вывод справки при использовании `-h` или `--help`.
  • Валидируйте входные параметры, чтобы убедиться, что они допустимые и безопасные. Например, убедитесь, что указанная директория существует.
  • Используйте понятные имена переменных и функции для повышения читаемости кода.