![]() |
Hello and Welcome from United States to the UNIX and Linux Forums! Thank You for Visiting and Joining Our Global Community.
|
|
google unix.com
|
|||||||
| Forums | Register | Forum Rules | Links | Albums | FAQ | Members List | Calendar | Search | Today's Posts | Mark Forums Read |
| Shell Programming and Scripting Post questions about KSH, CSH, SH, BASH, PERL, PHP, SED, AWK and OTHER shell scripts and shell scripting languages here. |
More UNIX and Linux Forum Topics You Might Find Helpful
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Using getopts | TurboArkhan | Shell Programming and Scripting | 3 | 06-22-2009 04:31 PM |
| Help in getopts | chella | Shell Programming and Scripting | 4 | 11-02-2007 01:09 AM |
| getopts help | GrepMe | Shell Programming and Scripting | 3 | 06-20-2007 11:47 AM |
| help in getopts | problems | Shell Programming and Scripting | 1 | 05-04-2006 11:07 PM |
| getopts | Shell Programming and Scripting | 3 | 12-05-2002 07:42 PM | |
![]() |
|
|
LinkBack | Thread Tools | Search this Thread | Rate Thread | Display Modes |
|
||||
|
getopts
I have a script which fires a command based on certain parameters. I am posting the code below..
The options needs be given such that -u option goes along with -d and -s, -f goes with -d and -t goes with -s and -d. 1) How do I ensure that user misses any of the option then he should be prompted . Is it simple if then else where I check the length of string of all these options. USAGE="Usage: `basename $0` [-s schemaname] [-d databasename] [-u username] -f -t -h" while getopts :s:d:u:fth params do case $params in s) SOURCESCHEMA="$OPTARG" ;; f) FULL='y' ;; t) TABLE='y' ;; d) DBNAME="$OPTARG" ;; u) USERNAME="$OPTARG" ;; h) help_doc exit 0 ;; ?| echo "Invalid Option Specified" echo "$USAGE" 1>&2 ; exit 1 ;; esac done Thanks.. |
|
||||
|
I added this line at the end of the script (after getopts), maybe the approach is wrong..
if [ $# -eq "3" ]; then "Option 1 specified -s -d -u" elif [ $# -eq "2" ]; then "Option 2 specified -d and -f" fi However $# always evaluates to 6 if provide the option scriptname -d databasename -u username -s schemaname. How did it arrive at 6 ? |
|
||||
|
I think I got it now.
If i provide scriptname -s schema -u user -d database, $# evaluates to 6 based on no of options and its values. (-s schema) 2, (-u user) 2 and (d database ) 2. So if it is -d database -f it evaluates to 3 (-d database)2 and (-f) 1. If he specifies -d database and -t ( That too evaluates to 3) . How do i check if he has specified -t or -f then ? |
|
|||||
|
I didnt test this at all, just a thought I had. Im sure there are a million ways to do this.
Code:
USAGE="Usage: `basename $0` [-s schemaname] [-d databasename] [-u username] -f -t -h"
while getopts :s:d:u:fth params
do
case $params in
s) SOURCESCHEMA="$OPTARG"
let COUNT= $COUNT+10000
;;
f) FULL='y'
;;
t) TABLE='y'
;;
d) DBNAME="$OPTARG"
let COUNT= $COUNT+1
;;
u) USERNAME="$OPTARG"
let COUNT= $COUNT+1000
;;
h)
help_doc
exit 0
;;
?)
echo "Invalid Option Specified"
echo "$USAGE" 1>&2 ; exit 1
;;
esac
if [ "$COUNT" -ne 10101 ]
then
help_doc
exit 0
elif [ ! -z $FULL ]
then
echo "Paramater FULL is Set"
elif [ ! -z $TABLE ]
then
echo "Paramater TABLE is Set"
else
echo "Neither TABLE or FULL Are Set"
fi
|
|
||||
|
I was able to do it with the $#. Thanks for the help..
|
| Sponsored Links | ||
|
|
![]() |
| Bookmarks |
| Thread Tools | Search this Thread |
| Display Modes | Rate This Thread |
|
|