problem with getopts


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting problem with getopts
# 1  
Old 07-23-2012
problem with getopts

Hi,

I have written a script to take command line arguments using geopts.This is the code.

Code:
#!/bin/sh
# The usage of this script.
usage="Usage is $0"
usage="$usage [-a <database>]"
usage="$usage [-b <parameter>]"
usage="$usage [-c <table_name>]"
# Use the getopt utility to set up the command line flags.
set -- `/usr/bin/getopt a:b:c: $*`
echo "$?"
if [ $? -ne 0 ];then
  echo "Invalid script invocation"
  echo $usage
  exit
fi
# Process individual command line arguments
while [ $1 != -- ]; do
  case $1 in
    -a)  database=$2
         shift
         ;;
    -b)  parameter=$2
         shift
         ;;
    -c)  tablename=$2
         shift
         ;;
  esac
  shift
done

echo "$database"
echo "$parameter"
echo "$tablename"


When i am excuting this script without passing any parameter then it is not showing invalid invocation as it should. Also when i am not passing any parameter then also set command is returning value as 0 means success, but it should return 1 as there is no parameter passed to set means failure. PLease see the execution results of the script.

Code:
ksh -x test.sh
+ usage='Usage is test.sh'
+ usage='Usage is test.sh [-a <database>]'
+ usage='Usage is test.sh [-a <database>] [-b <parameter>]'
+ usage='Usage is test.sh [-a <database>] [-b <parameter>] [-c <table_name>]'
+ /usr/bin/getopt a:b:c:
+ set -- --
+ echo 0
0
+ [ 0 != 0 ]
+ [ -- != -- ]
+ echo ''
+ echo ''
+ echo ''

Please suggest. Is there something wrong in the code.Smilie

---------- Post updated at 01:25 PM ---------- Previous update was at 01:24 PM ----------

This is the code that i am executing.

Code:
#!/bin/sh
# The usage of this script.
usage="Usage is $0"
usage="$usage [-a <database>]"
usage="$usage [-b <parameter>]"
usage="$usage [-c <table_name>]"
# Use the getopt utility to set up the command line flags.
set -- `/usr/bin/getopt a:b:c: $*`
echo "$?"
if [ $? != 0 ];then
  echo "Invalid script invocation"
  echo $usage
  exit
fi
# Process individual command line arguments
while [ $1 != -- ]; do
  case $1 in
    -a)  database=$2
         shift
         ;;
    -b)  parameter=$2
         shift
         ;;
    -c)  tablename=$2
         shift
         ;;
  esac

shift
done

Last edited by zaxxon; 07-23-2012 at 05:36 AM.. Reason: guess what
# 2  
Old 07-23-2012
What are you trying to do here?
Code:
 `/usr/bin/getopt a: b:c: $*`

# 3  
Old 07-23-2012
Hi,

My script requires 3 command line arguments to execute it.
If someone does pass these 3 arguments then it should return that invalid invocation and the usage.But in my script even if i do not pass any argument it is not going in that if part. Also when i am not passing any argument then also set is returning the value as 0 .i.e. successfull execution instead of 1 .i.e failure. Since it is returning 0 it is not going into that if part where i have mentioned if [$? -ne 0];then echo "something".

Please suggest.Smilie
# 4  
Old 07-23-2012
Maybe you could use $# for the number of arguments passed!!

That should work fine! Sorry I am lil' confused with this getopt idea!
# 5  
Old 07-23-2012
Code:
$# also didnot worked.
 
ksh -x test.sh
+ usage='Usage is test.sh'
+ usage='Usage is test.sh [-a <database>]'
+ usage='Usage is test.sh [-a <database>] [-b <parameter>]'
+ usage='Usage is test.sh [-a <database>] [-b <parameter>] [-c <table_name>]'
+ /usr/bin/getopt a:b:c: 0
+ set -- -- 0
+ echo 0
0
+ [ 0 -ne 0 ]
+ [ -- != -- ]
+ echo ''
+ echo ''
+ echo ''

still it is not going into that if block.
With $# it is showing 0 arguments passed, but still not going into the if block.Smilie

Last edited by Scott; 07-23-2012 at 09:42 AM.. Reason: Deja vu
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Identify problem with while getopts

can anyone spot a problem with the below: $ $ cat getopts.sh #!/bin/sh usage() { echo "myscript.sh local /tmp data.txt 600s -query" 1>&2; exit 1; } while... (4 Replies)
Discussion started by: SkySmart
4 Replies

2. Shell Programming and Scripting

getopts - optional and problem to display help

In the below code while getopts :rfw:d:s:a: options do case "$options" in r) echo reverse;; f) echo forward;; w) window=$OPTARG;; d) duration=$OPTARG;; s) search=$OPTARG;; a) value=$OPTARG;; *) help; exit;; esac done ... (2 Replies)
Discussion started by: Amutha
2 Replies

3. Shell Programming and Scripting

getopts problem

Hi everyone I want to know how can we pass multiple argument in getopts suppose PARAMS="abcd" while getopts ${PARMS} FLAG do case ${FLAG} in (a) (b) (c) (d) esac (6 Replies)
Discussion started by: aishsimplesweet
6 Replies

4. Shell Programming and Scripting

getopts problem

How do I get the getopts command to display whats written at my help option if no option is types in? For example, myscript.sh -h will bring up my help option, however, I also want myscript.sh to do the same! #!/bin/bash while getopts :abh opt do case "$opt" in... (2 Replies)
Discussion started by: linuxkid
2 Replies

5. UNIX for Advanced & Expert Users

getopts problem

i was going through the man page of getopts this particular section is not clear to me can anyone please clarify in a little detail so that i can understand the concept MANPAGE:: Since getopts affects the current shell execution environ- ment, it is generally provided as a... (7 Replies)
Discussion started by: mobydick
7 Replies

6. Shell Programming and Scripting

problem with getopts

Hi, I am a new member to unix.com. Actually I am facing a problem with getopts. In my script i have used getopts to parse the parameters. when i use the script as shown below its working fine: find_status -p all ### where find_status is a script name. But even if I pass more than one... (3 Replies)
Discussion started by: pvamsikr
3 Replies

7. Shell Programming and Scripting

Problem in getopts

while getopts l:f:s:o:h: c do case $c in l) tail -${OPTARG} /etc/passwd exit 2;; f) head -${OPTARG} /etc/passwd exit 3;; s) grep ${OPTARG} /etc/passwd | cut -d: -f7 exit 4;; o) OARG=$OPTARG exit 5;; h) ... (3 Replies)
Discussion started by: nadman123
3 Replies

8. Shell Programming and Scripting

getopts help

Hi i have part of the scripts below ,getopt for -h or ? not working for me. can anybody tell me if this sytax right or wrong. #!/usr/bin/ksh program=$(basename $0) ##################################################################################### function usageerr { RC=1 ... (3 Replies)
Discussion started by: GrepMe
3 Replies

9. Shell Programming and Scripting

Problem with getopts

I need to parse parameters but the arguments could be NULL,example: > cat getopts.sh while getopts "a:b:" opt 2>/dev/null do case "${opt}" in a) echo "A:${OPTARG}" ;; b) echo "B:${OPTARG}" ;; *) exit 1 ;; esac done > getopts.sh -a TEST1 -b TEST2... (5 Replies)
Discussion started by: Klashxx
5 Replies

10. Shell Programming and Scripting

getopts

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