0

i have the following scenario want to run the following script with manadory and optional arguments inside a bash script

Manadory options are :

filename=""
port=""
optional arguments

type -t [A/B]
balances -b bal
prices -p

./test filename port -t A -b bal

my code i have that won't parse the options is
This is what i have

!/bin/bash

filename=""
port=""

while getopts b:t:p opt
 do
      case $opt in
          b) BAL="${OPTARG}"
             if [ "$BAL" == "" ]
             then
                print_usage $0
             else
                echo "Balances is " $BAL
             fi ;;

          t) TYPE="$OPTARG";;
          p) PRICES="$OPTARG";;
          ?) print_usage $0
             exit 1;;
      esac
done
echo "Balances:                "$BAL
echo "Type:                    "$TYPE

Any ideas

Edited by Reverend Jim: Fixed formatting

3
Contributors
5
Replies
11
Views
6 Years
Discussion Span
Last Post by cfajohnson
0

Please use the (CODE) button
Please tell us specifically what "won't parse the options" means. Do you get options that are incorrect? Does the script run, but no options are seen? What?

Edited by mike_2000_17: Fixed formatting

0

Please use the (CODE) button
Please tell us specifically what "won't parse the options" means. Do you get options that are incorrect? Does the script run, but no options are seen? What?

Ok sorry I want to be able to pass in the manadory options and then the optional

the Manadory options are been parsed but -t -p -b aren't been parsed just ignored .

this is what i want
test filename port -t -p 123 -b we
so far filename and port but -t -p -b are not been parsed

Any ideas ?!?
have but the

while getopts t:p:b: opt ; do
...

done
filename="$1"
port="$2"

shift $(( OPTIND-2 ))

Edited by mike_2000_17: Fixed formatting

0

My version of getopts wants only flagged options, so try this:

filename=$1
port=$2
shift 2
while getopts t:p:b: opt ; do
 # ...
done

Of course that doesn't have any error checking etc

0

the above exmaple gets the mandatory options missed up with the optional arguments .

filename=$1
  
      port=$2
 
      ext= $3

      shift 3
   
      while getopts t:p:b: opt ; do
   
  case $opt in
               t) tfile="${OPTARG}";;
               p) tdir="${OPTARG}";;
               b) tbl="${OPTARG}";;
               ?) print_usage $0
            exit 1;;
   esac

   
      done
echo "file = $file"
echo " Port =$port "
echo " Ext= $ext
echo  "opt1 = $tfile "
echo " opt2 = $tdir"
echo " opt3 = $tbal"

if i run this script with wrong numbe of mandatory arguments and use optional argumnets it will assign the optional to the mandatory argumnets .
./bscript file1 -t BLAH

result
file = file1
port = -t
ext = BLAH

how can i avoid this from happening ??

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.