Adding another option to getopt


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Adding another option to getopt
# 8  
Old 06-14-2013
You could use opterr and optopt to check what the code sees as option and error code.
# 9  
Old 06-14-2013
You're obviously not telling us everything:
The variables file_name and op haven't been declared.
You haven't shown us what headers are being included.
The diagnostic message you say you're getting from getopt() doesn't match the output produced by getopt() when I try it on Mac OS X 10.7.5. (You don't show the name of the program calling getopt() in the output and you added single quotes that getopt() doesn't print. The following trivial program based on your code snippets:
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

void
instruct() {
        printf("In instruct\n");
}

main(argc, argv)
        int     argc;
        char    **argv;
{
        int     a=0, d=0;
        int     i;
        int     op;
        float   b=0, c=0;
        char    file_name[256];

        for(i = 0; i < argc; printf("argv[%d]=%s\n", i, argv[i]), i++);
        if (argc == 1)
                instruct();
        while ((op = getopt(argc, argv, "A:B:C:D:")) != EOF)
                switch (op) {
                        case    'A':    a = atoi(optarg);
                                         break;
                        case    'B':    b= atof(optarg);
                                        break;
                        case    'C':    c= atof(optarg);
                                        break; //why break???
                        case    'D':    d = atoi(optarg);
                                        break;
                      default:  instruct();
                }
        if ((argc - optind) != 1) {
                instruct();
        }
        printf("a=%d, b=%f, c=%f, d=%i\n", a, b, c, d);
        strcpy(file_name, argv[optind]);
        printf("file_name: %s\n", file_name);
        exit(0);
}

when stored in a file named t.c and built using the command:
Code:
make t

and invoked with:
Code:
./t -A1 -B 2 -C3 -D4 dirname/filename

produces the output:
Code:
argv[0]=./t
argv[1]=-A1
argv[2]=-B
argv[3]=2
argv[4]=-C3
argv[5]=-D4
argv[6]=dirname/filename
a=1, b=2.000000, c=3.000000, d=4
file_name: dirname/filename

and when invoked with:
Code:
./t -D 123.456789 -E file

produces the output:
Code:
argv[0]=./t
argv[1]=-D
argv[2]=123.456789
argv[3]=-E
argv[4]=file
./t: illegal option -- E
In instruct
a=0, b=0.000000, c=0.000000, d=123
file_name: file

I added the red color to the output produced by getopt() for emphasis. Note the name of the program followed by a : at the start of the line and that there are no quotes around the unknown option letter E at the end of the line.

It looks to me like getopt() is working as advertised on Mac OS X.

Is there something else that you're not showing us in your source that might be affecting the behavior of getopt()?

Last edited by Don Cragun; 06-14-2013 at 03:31 AM.. Reason: Fixed missing # induced by copy/paste error.
This User Gave Thanks to Don Cragun For This Post:
# 10  
Old 06-14-2013
You are right, everything was fine with getopt. The problem was that the binary file that make was outputting was not the one being used when calling it on the command line, but a previous compilation with the same name from the bin folder. I changed the name in the $PROG line in the makefile and this new compilation indeed displays all options for getopt. Sorry and thanks so much about this!
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

[Solved] adding email option to KSH

Hi, I wanted to add a email option to this script. and was wondering if anyone could help me out. #!/bin/ksh echo "Finding hdisk" <DIR>/find-disk i=1 b=0 p=0 while ... (2 Replies)
Discussion started by: vpundit
2 Replies

2. Shell Programming and Scripting

getopt invalid option selection

What is the significance of the *) and ?) in the below code. while getopts a:b:c:he opt do case $opt in a) _name="$OPTARG";; b) _project="$OPTARG";; c) line="$OPTARG";; e) _cmd="XX";; h) Projects=1;; *) echo "$OPTARG is an invalid option"; my_exit 1;; ?)... (3 Replies)
Discussion started by: posix
3 Replies

3. Shell Programming and Scripting

recently introduced to the newer option for find...does an older option exist?

To find all the files in your home directory that have been edited in some way since the last tar file, use this command: find . -newer backup.tar.gz Is anyone familiar with an older solution? looking to identify files older then 15mins across several directories. thanks, manny (2 Replies)
Discussion started by: mr_manny
2 Replies

4. UNIX for Dummies Questions & Answers

Using Getopt Option

Hi I need to use getopt option and I have no idea what it is or how to use it. I need to use it on this awk script: awk -F, -v cellid="$1" -v paramval="$2" -v oldfile="$3" -v newfile="$4" '$2==cellid{$3=newvalue}1' OFS="," $3 > $4 I tried reading up on it but I just confuse... (2 Replies)
Discussion started by: ladyAnne
2 Replies

5. Shell Programming and Scripting

--alternative option in getopt

Hi, i need to use --alternative option of getopt for ex . getopt -o a:c: --alternative pw: -- "$@" if i use like this, i am not getting any output.Please help me how to correct this.i need to have a combination of long and short options.But long options have to begin with - and not... (0 Replies)
Discussion started by: padmisri
0 Replies

6. Programming

probs adding linker option in g++

Hi all Im trying to compile a C++ program, however Im having issues trying to link a particular library to the compiling and linking statement. Here is what Im doing g++ mips4 -std=c++98 -g disk_reporter.cpp -o disk_reporter If I do this alone, the linker complains that library... (2 Replies)
Discussion started by: JamesGoh
2 Replies

7. Shell Programming and Scripting

getopt help

:) Can anybody help me about how to use getopt in shell scripting. (3 Replies)
Discussion started by: darshakraut
3 Replies

8. Shell Programming and Scripting

getopt help

I m trying to use getopt This is my script, but it doesn't take argument in variable, Please help. set - - `getopt mscl: $*` if then echo "Exiting...." exit 2 fi for i in $* do case $i in -m) MAIL="$i"; shift;; -s) SCRIPT=$OPTARG; shift;; -c) COB=$OPTARG; shift;;... (2 Replies)
Discussion started by: darshakraut
2 Replies

9. Shell Programming and Scripting

option followed by : taking next option if argument missing with getopts

Hi all, I am parsing command line options using getopts. The problem is that mandatory argument options following ":" is taking next option as argument if it is not followed by any argument. Below is the script: while getopts :hd:t:s:l:p:f: opt do case "$opt" in -h|-\?)... (2 Replies)
Discussion started by: gurukottur
2 Replies

10. Shell Programming and Scripting

Adding an Option

I have a file that takes 2 or 3 arguments... ie: $argv(2), $argv(3) If I had to add another argument, I would be ok, but nooo.. that would be too easy for the new programmer. Before you go there - This is not a school problem, it's a real world problem.. If I wanted to add an option, for... (1 Reply)
Discussion started by: Brusimm
1 Replies
Login or Register to Ask a Question