Разбор параметров командной строки в 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. Если после буквы ключа идёт двоеточие, значит данный ключ требует аргумента. 


