.sh & getopts

Brandon Gooch jamesbrandongooch at gmail.com
Sun Jun 6 01:30:15 UTC 2010


On Sat, Jun 5, 2010 at 6:20 PM, Aiza <aiza21 at comclark.com> wrote:
> Robert Bonomi wrote:
>>>
>>> Date: Sat, 05 Jun 2010 20:51:28 +0800
>>> From: Aiza <aiza21 at comclark.com>
>>> To: Robert Bonomi <bonomi at mail.r-bonomi.com>
>>> Subject: Re: .sh & getopts
>>>
>>> Robert Bonomi wrote:
>>>>
>>>>
>>>>>
>>>>> From owner-freebsd-questions at freebsd.org  Thu Jun  3 23:36:28 2010
>>>>> Date: Fri, 04 Jun 2010 12:35:56 +0800
>>>>> From: Aiza <aiza21 at comclark.com>
>>>>> To: "questions at freebsd.org" <questions at freebsd.org>
>>>>> Cc: Subject: .sh & getopts
>>>>>
>>>>> Have this code
>>>>>
>>>>> shift; while getopts :ugr: arg; do case ${arg} in
>>>>>    u) action="freebsd-update";;
>>>>>    g) action="freebsd-upgrade";;
>>>>>    r) action="freebsd-rollback";;
>>>>>    ?) exerr ${cmd_usage};;
>>>>> esac; done; shift $(( ${OPTION} -1 ))
>>>>>
>>>>>
>>>>> Command being executed looks like this, cmd action -flags aaaa bbbb
>>>>>
>>>>> Only a single -flag in allowed on the command.
>>>>>
>>>>> $# gives a count of parms ie: aaaa bbbb. in this example a count of 2.
>>>>>
>>>>> I am looking for something to check that holds the number of flags on
>>>>> the command. so I can code. if flag_count gt 1 = error
>>>>>
>>>>> Is there such a thing created by getopts?
>>>>
>>>> Why bother??
>>>>
>>>>  flag_count=0
>>>>  shift; while getopts :ugr: arg
>>>>   if flag_count = 1; then
>>>>     exerr ${cmd_usage}
>>>>   fi    flag_count=1;
>>>>   do case ${arg} in
>>>>   {{blah-blah}}
>>>>
>>> nope dont work.
>>
>> Yup.  I was in a hurry, got the code mechanics wrong.  it needs to be:
>>     flag_count=0
>>     shift;      while getopts :ugr: arg ; do
>>       if flag_count = 1; then
>>         exerr ${cmd_usage}
>>       fi        flag_count=1;
>>       case ${arg} in
>>         {{blah-blah}}
>>       ecas
>>     done
>>
>>
>>
> I think I see what your are saying. so to adapt it to my code
>
>
> flag_count=0
> shift; while getopts :ugr: arg; do
>  flag_count + 1;
>  case ${arg} in
>     u) action="freebsd-update";;
>     g) action="freebsd-upgrade";;
>     r) action="freebsd-rollback";;
>     ?) exerr ${cmd_usage};;
>  esac; done; shift $(( ${OPTION} -1 ))
>
>
>  if flag_count gt 3; then
>    exerr ${cmd_usage}
>  fi
>
>
> I think I got the concept correct, but the flag_count + 1 is not correct. I
> get "flag_count: not found" when I run it this way.

You could use:

flag_count=`expr $flag_count + 1`

or...

...anyone else?

These types of open-ended questions are always fun :)

-Brandon


More information about the freebsd-questions mailing list