скрипт bash getopts, принимающий нераспознанные флаги - PullRequest
0 голосов
/ 10 июля 2019

Я не могу понять, почему мой простой скрипт bash анализирует не объявленные флаги. Вот как это выглядит:

#!/bin/bash 

while getopts "hi" OPTIONS
do

        case $OPTIONS in
                   h)     
                        echo "usage:"
                        echo "./scriptname.sh [options]"
                        echo " "
                        echo "options:"
                        echo "-i              install it"
                        echo "-h              show help menu"
                        exit 0
                        ;;

                   i)     
                        echo "this is function -i"
                        exit 0
                        ;;
                \?)
                        echo "illegal option"
                        exit
                        ;;
        esac
done

Что происходит, так это то, что он прекрасно работает при передаче -h и -i, однако если набрать -isomething и -hsomethingelse, он все равно вернет параметры, объявленные для h и i, так как, похоже, игнорирует все остальное, набранное после - я и -ч.

По сути, скрипт должен только анализировать -i и -h и возвращать «недопустимый параметр» для всего остального, даже если параметр начинается с -i или -h, пример -hospital.

Я попытался разделить две буквы в то время как getopts с:, однако таким образом, -i или -h будет работать, в зависимости от того, как: расположены.

Пример

while getopts "h:i:" OPTIONS
do

Спасибо

...