[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
getopts confuses lower and upper case options
From: |
[address@hidden] |
Subject: |
getopts confuses lower and upper case options |
Date: |
Thu, 20 Mar 2008 12:30:33 +1000 (EST) |
Configuration Information [Automatically generated, do not change]:
Machine: mips
OS: irix6.5
Compiler: gcc
Compilation CFLAGS: -DPROGRAM='bash' -DCONF_HOSTTYPE='mips'
-DCONF_OSTYPE='irix6.5' -DCONF_MACHTYPE='mips-sgi-irix6.5' -DCONF_VENDOR='sgi'
-DLOCALEDIR='/opt/local/share/locale' -DPACKAGE='bash' -DSHELL -DHAVE_CONFIG_H
-I. -I. -I./include -I./lib -I./lib/intl
-I/usr/people/panjkova/projects/bash/build/lib/intl -mabi=64 -mips4 -O2
uname output: IRIX64 pot 6.5 07010238 IP27
Machine Type: mips-sgi-irix6.5
Bash Version: 3.2
Patch Level: 0
Release Status: release
Description:
============
scripterror (source below) is a function that
puts the argument of option m in variable 'message'
puts the argument of option M in variable `testText'
but as you can see, if i supply both options, the argument for -M has gone into
the argument for -m instead:
# -bash 37 > scripterror -m messagetext -M testtext
testItem=
message=testtext
Warning: in -bash: testtext
Also, if I supply only option -M, its argument again gets treated as if it is
the argument of -m:
# -bash 38 > scripterror -M testtext
testItem=
message=testtext
Warning: in -bash: testtext
Note however that if I only list one of -m or -M in the getopts list, they are
handled with case sensitivity. (I.e.,
-m can't be used for -M)
Repeat-By:
==========
load the function scripterror below, then issue the test commands above to
demonstrate the problem.
Look at the value of the variables message and testItem.
scripterror() {
#------------------------------------------------------------------------------#
# Subversion keywords:
# $LastChangedDate: 2008-03-19 14:29:18 +1000 (Wed, 19 Mar 2008) $
# $LastChangedRevision$
# $LastChangedBy: panjkova $
# $HeadURL:
svn://starship/CINRS/aussiegrass/users/panjkova/bin/bash_functions/scripterror $
#------------------------------------------------------------------------------#
local verbosityRestoreCmd=$(localVerbositySave)
set +x ; set +v
local ThisFun=scripterror
trap "eval $verbosityRestoreCmd" RETURN
trap "echo Trapped an unforeseen error in scripterror with args " ERR
usage="Usage: scripterror -m message -l location -s severity -e
returnstatus -A emailTo \n
\t -m error message\n
\t -l string describing error location (e.g. script name, section,
etc.)\n
\t -s severity : fatal - exit, warning - keep processing script\n
\t -A email address : if given, then message sent to that address as
well\n
\t -e return status from last command, usually $? "
#----defaults----#
local message="Unspecified error"
local location="$0"
local severity="Warning: "
local emailTo=""
local badoption=""
local returnstatus=""
#----# Save the getops variables before sweeping the CLAs. #----#
local opt
local saveOPTARG=${OPTARG:-""}
local saveOPTIND=${OPTIND:-1}
OPTIND=1
while getopts ":e:m:l:s:A:M:" opt ; do
case $opt in
e ) returnstatus=$OPTARG ;;
m ) message=$OPTARG ;;
l ) location=$OPTARG ;;
s ) severity=$OPTARG ;;
M ) testItem=$OPTARG ;;
A ) emailTo=$OPTARG ;;
\: ) echo "Argument missing from -$OPTARG option in function
scripterror" ;;
\? ) eval badoption=\$$((OPTIND - 1)) ;;
esac
done
shift $((OPTIND - 1 )) #--# Pushes the processed option/args out, leaving
only unprocessed CLAs. #--#
#----# Restore the getopts arguments. #----#
OPTARG=$saveOPTARG
OPTIND=$saveOPTIND
echo testItem=$testItem
echo message=$message
#--subsequent args are ignored--#
#----# Assemble the full message. #----#
local fullMessage="$severity in $location: $message"
if [ ! -z "$returnstatus" ] ; then
fullMessage=$fullMessage": Return status from last command was:
$returnstatus"
fi
if [ ! -z "$badoption" ] ; then
fullMessage=$fullMessage": Bad option to scripterror ($badoption)
ignored."
echo -e $usage >&2
fi
#----# Output to stderr, and mail. #----#
echo $fullMessage >&2
if [ ! -z "$emailTo" ] ; then
echo $fullMessage | mailx -s "$fullMessage" $emailTo
fi
if [ "$severity" = "FATAL" -o "$severity" = "fatal" ] ; then
echo "Exiting!" >&2
exit $returnstatus
else
return 0
fi
}
************************************************************************
The information in this email together with any attachments is
intended only for the person or entity to which it is addressed
and may contain confidential and/or privileged material.
Any form of review, disclosure, modification, distribution
and/or publication of this email message is prohibited, unless
as a necessary part of Departmental business.
If you have received this message in error, you are asked to
inform the sender as quickly as possible and delete this message
and any copies of this message from your computer and/or your
computer system network.
************************************************************************
- getopts confuses lower and upper case options,
[address@hidden] <=