#!/bin/bash
set -e
ME=`basename $0`
function print_help() {
echo "Работа с файлом test_file"
echo
echo "Использование: $ME options..."
echo "Параметры:"
echo " -c Создание файла test_file."
echo " -w text Запись в файл строки text."
echo " -r Удаление файла test_file."
echo " -h Справка."
echo
}
function create_file() {
touch test_file
}
function write_to_file {
echo "$TEXT" >> test_file
}
function remove_file {
rm test_file
}
# Если скрипт запущен без аргументов, открываем справку.
if [ $# = 0 ]; then
print_help
fi
while getopts ":cw:r" opt ;
do
case $opt in
c) create_file;
;;
w) TEXT=$OPTARG;
write_to_file
;;
r) remove_file
;;
*) echo "Неправильный параметр";
echo "Для вызова справки запустите $ME -h";
exit 1
;;
esac
done
Итак, что мы имеем?
• Команда set -e остановит скрипт, если при его выполнении возникнет ошибка (подробнее о других опциях здесь).
• Основные операции скрипта упакованы в функции. Конечно, глупо помещать в функции по одной команде, но это лишь для примера, в реальности их может быть ну очень много.
• Функция getopts разбирает переданные аргументы. За ней перечисляются допустимые опции. Двоеточие после опции 'w' означает, что c данной опцией идет дополнительный аргумент, который помещается в переменную $OPTARG.
• Опции можно комбинировать, но стоит учитывать то, что они выполняются по порядку. Это значит, что если мы выполним script -rc то сначала файл будет удален, а затем создан. При этом, если файла не существовало, то скрипт завершится с ошибкой, не дойдя до создания файла.
• Также стоит учитывать то, что после ключа 'w' обязательно должен следовать аргумент. Если он будет отсутствовать, то скрипт выполнит опцию '*' (по умолчанию). Интересно, что если запустить script -wr Hallo, то опция 'r' будет воспринята как дополнительный параметр к опции 'w', а 'Hallo' проигнорировано. Правильно будет script -w Hallo -r