.sh & getopts

Aiza aiza21 at comclark.com
Sat Jun 5 23:20:52 UTC 2010


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.


More information about the freebsd-questions mailing list