Using getopts

Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Using getopts
# 1  
Old 03-05-2008
getopts issue! UPDATED! Please read :)

I am having some trouble/questions with getopts that I can't find any solid info on with google

I need it to parse things of the syntax of:

-r # # # -f [word] [filename] -c [filename]

with as many repeats as possible, and it should catch erroneous commands also, but continue going...

my first question is, -r accepts 3 arguments. Does this mean I need 3 :'s when I do
while getopts r:f:c: o

also, what does the o in the above line represent exactly?

here is my code so far:
#! /bin/bash

while getopts r:f:c: o
do case "$o" in
	r)sh right.s $OPTARG $(( $OPTARG+1 )) $(( $OPTARG+2 ));;
	f)sh findtext.s $OPTARG $(( $OPTARG+1 ));;
	c)sh count.s $OPTARG;;
	?)echo "Useage: -r [#] [#] [#]"
		echo "	-f [key] [filename]"
		echo "	-c [filename]";;

This doesnt work as desired. OPTARG holds the argument for the parsed option...... but since -r takes 3 arguments, does anyone know how to pass it the next THREE arguments? the above method adds 1 and 2 to the value of OPTARG.... Smilie

Also, in regards to -c , if *.(extension) wildcards are passed, it only operates on the first one........why?

Is there a way to dereference OPTIND which holds the index of the argument to be parsed? Then I could dereference OPTIND, OPTIND+1 and OPTIND+2 to get the next 3 arguments properly passed...!

Thanks for reading! Any help is greatly appreciated :-D

Last edited by TurboArkhan; 03-05-2008 at 01:08 AM..
# 2  
Old 03-05-2008
Here is an example of using multiple optional arguments. All of them are in OPTARG.
# foo is shell function in this example - it could be a separate script
	echo "foo: I got $# options"	
	echo " they are $@"
while getopts a:  opt
  set -A arr $OPTARG
  case $opt in
    a) echo "option -a"
       for i in $OPTARG
           echo "subargument = $i"         
       echo "running foo with these options"
       foo $OPTARG
       exit 0 ;;
   \?) echo "\nUsage: $0 [-a <option>]" >&2
        exit 2;;

csadev:/home/jmcnama> -a "1 2 3 4"
option -a
subargument = 1
subargument = 2
subargument = 3
subargument = 4
running foo with these options
foo: I got 4 options
they are 1 2 3 4
# 3  
Old 03-05-2008
so you mean to tell me ALL I needed to do this whole time was encase all the arguments in quotation? It works perfect with them!... but is there a proper way to omit the quotes?

..... ??... .....

EDIT: This code block, if i give arguments to bad options, it immediatley exits the program instead of pressing onward

 #! /bin/bash

while getopts r:f:c: o
do case "$o" in
	r)sh right.s $OPTARG;;
	f)sh findtext.s $OPTARG;;
	c)sh count.s $OPTARG;;
	?)echo "Useage: -r ''[#] [#] [#]'' "
		echo "	-f ''[key] [filename]''"
		echo "	-c ''[filename]''";;

EDIT: While this works, if an invalid command is given arguments, it gives the ?) echo's, and then returns to the prompt, as opposed to pressing on if there are more arguments included....

did I miss something?

Last edited by TurboArkhan; 03-05-2008 at 08:52 PM..
# 4  
Old 06-22-2009

Try indirect expansion with !
First set A3 to the index of the 3rd argument and at the end increment OPTIND by 2

r) A3=$(( $OPTIND + 1 ))
sh right.s $OPTARG ${!OPTIND} ${!A3}
OPTIND=$(( $OPTIND + 2 )) ;;
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Using getopts

Hi. Can somebody please show me an example of how to use getopts to assign a variable if it's been passed into the script but to set a default if no value has been passed in? And also how to handle a param with multiple values ... so a sub parse (can I use a function for this?)? Here's my code... (1 Reply)
Discussion started by: user052009
1 Replies

2. Shell Programming and Scripting

Getopts help

Hi All, I am writing a script to pass the getopts argument to the function which I have. But it as soon as I execute the script, the argument is taking it as blank. I tried using multiple way to check but its not working. Can someone please let me know what wrong in this code. function1()... (4 Replies)
Discussion started by: sidh_arth85
4 Replies

3. UNIX for Dummies Questions & Answers


while getopts v OPTION do case $OPTION in v) echo "Hello" ;; *) exit 1;; esac done Suppose I have script Whose Signature is <fixed_argument> When I run the script with -v "file", it echoes a hello but, when I try the other way i.e, (1 Reply)
Discussion started by: Devendra Hupri
1 Replies

4. Shell Programming and Scripting

Using getopts. Need help

Hi all... I have been looking on here for the past few days for an answer and Im gonna have to break down and ask. I just learned about the getopts command last week so have been trying to utilize it in my scripts. Below, I am trying to set up a case structure for options using getopts.... (1 Reply)
Discussion started by: losingit
1 Replies

5. Shell Programming and Scripting

getopts help

First off, I apologize for my lack of knowledge. I realize my problem will probably seem pretty basic to everyone, but I've been at this for several hours now and I've gotten nowhere. I would contact my professor, but it is too late for that. Anyway, I'm trying to write a function called... (1 Reply)
Discussion started by: Unknown50862
1 Replies

6. UNIX for Dummies Questions & Answers


Hey, i need help with the use of getopts in shell script. tried reading a lot online, but found incomplete examples (maybe complete but cudn't make out). PLzz help...explain in deatil plzzz, i am a newbie:confused: (3 Replies)
Discussion started by: SasankaBITS
3 Replies

7. Shell Programming and Scripting

using getopts

Hi, I have a program where I want to use getopts. I want to use "-i" option and then optionally supply arguments. If user dosent supply arguments, then also it should work. Please tell me how to proceed. Here is some code, this is not right code btw but a sample to understand what I want to... (1 Reply)
Discussion started by: som.nitk
1 Replies

8. HP-UX

using getopts

Is there a restriction on levels of using 'getopts' ? I have several scripts, each of which requires an option as the first parameter . If I call one prg separately it works fine, but when one prg calls another prg and passes the option on the called prg, then the called prg seems not to process... (3 Replies)
Discussion started by: vslewis
3 Replies

9. Shell Programming and Scripting

Help in getopts

Hi, My script will take a input file as a parameter(which is not mandatory) and also an option. ksh <inputfile> The option -n I have given is no way related to the input file. Now the problem here is when i execute the script specifying the input file and the option(the way... (4 Replies)
Discussion started by: chella
4 Replies

10. Shell Programming and Scripting


I have a script that facillitates NDM (Connect::\Direct) transfer to remote hosts. This script uses getopts to parse through the parameters passed to it and to set appropriate variables based upon what was passed in. Kickoff="mv $PATH/$FILE1 $PATH/$FILE2" ndm_shell.ksh -p $Node -s $Source -d... (3 Replies)
Discussion started by: google
3 Replies
Login or Register to Ask a Question

Featured Tech Videos