.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