Передача параметров через командную строку делает скрипт более гибким и переносимым. Это позволяет запускать скрипт с разными аргументами, не изменяя сам скрипт.
Использование `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`.
- Валидируйте входные параметры, чтобы убедиться, что они допустимые и безопасные. Например, убедитесь, что указанная директория существует.
- Используйте понятные имена переменных и функции для повышения читаемости кода.