Если у вас есть только одна опция для проверки, и она всегда будет первой ($1
), тогда самый простой вариант - if
с тестом ([
).Например:
if [ "$1" == "-h" ] ; then
echo "Usage: `basename $0` [-h]"
exit 0
fi
Обратите внимание, что для совместимости с posix =
будет работать так же, как и ==
.
Причина, по которой $1
необходимо заключить в кавычки, заключается в том, что если$1
не будет, тогда оболочка попытается запустить if [ == "-h" ]
и потерпит неудачу, потому что ==
был дан только один аргумент, когда он ожидал двух:
$ [ == "-h" ]
bash: [: ==: unary operator expected
Как подсказал by others , если у вас есть более одной простой опции или вам нужны опции для принятия аргументов, то вам определенно стоит пойти на дополнительную сложность использования getopts
.В качестве краткого справочного материала мне нравится 60-секундный учебник getopts . †
Вы также можете рассмотреть программу getopt
вместовстроенной оболочки getopts
.Это позволяет использовать длинные опции и опции после аргументов без опций (например, foo a b c -v
, а не просто foo -v a b c
). Этот ответ Stackoverflow объясняет, как использовать GNU getopt
.
† jeffbyrnes упомянул, что исходная ссылка умерла, но, к счастью, машина обратного хода заархивировала ее.