Разбор параметров командной строки в shell
Недавно встретил шаблон для bash-скриптов, разбирающих параметры коммандной строки. Решение красивое и полезное, поэтому и сам стал его использовать.
#! /bin/sh
USAGE="Usage: `basename $0` [-hv] [-o arg] args"
# Разбор параметров командной строки
while getopts hvo: OPT; do
case "$OPT" in
h)
echo $USAGE
exit 0
;;
v)
echo "`basename $0` version 0.1"
exit 0
;;
o)
OUTPUT_FILE=$OPTARG
;;
\?)
# getopts вернул ошибку
echo $USAGE >&2
exit 1
;;
esac
done
# Удаляем обработанные выше параметры
shift `expr $OPTIND - 1`
# Здесь мы требуем как минимум один параметр помимо опций
# Удалить блок, если он не требуется
if [ $# -eq 0 ]; then
echo $USAGE >&2
exit 1
fi
# Доступ к дополнительным параметрам осуществляется через обычные
# переменные $@, $*, $1, $2, и т.д. Или используя этот цикл
for PARAM; do
echo $PARAM
done
# EOF
Для добавления новых параметров прописываем их в параметрах
getopt
и пропысываем реакцию в case
. Если после буквы ключа идёт двоеточие, значит данный ключ требует аргумента.