The UNIX and Linux Forums  
Hello and Welcome from United States to the UNIX and Linux Forums! Thank You for Visiting and Joining Our Global Community.

Go Back   The UNIX and Linux Forums > Top Forums > Shell Programming and Scripting
.
google unix.com




View Single Post in the UNIX and Linux Forums - Click on the Thread or Permalink to View Entire Thread -->
  #1 (permalink)  
Old 08-19-2008
JoeJoseph JoeJoseph is offline
Registered User
  
 

Join Date: Aug 2008
Posts: 1
getopts: bad option(s)

Hi,

I have a script that ran perfectly on Solaris 5.8
However after upgrade to Solaris 5.10 it started failing.
I invoke the script as below:
./TestScript3.ksh --dir $APP_DATA_IN_OLD $NDM_DATA/$NEXT_FILE
When i execute it i get the following error "getopts: dir bad option(s)".
Please let me know what has changed between Solaris 5.8 & Solaris 5.10 to cause this & how it can be fixed. I am a Newbie to Scripts.
The body of TestScript3.ksh is given below:

Code:
#!/bin/ksh

USAGE="
Usage:  TestScript2 ( --about | --help | --usage | --version )
        TestScript2 [ --bzip ] [ -b|--bzip2] [ -c|--cycle cycles ] [ -d|--date ]
                   [ --dir dir ] [ -f|--force ] [ -g|--gzip ] [ -p|--pack ]
                   [ -s|--silent ] [ -t|--touch ] [ -z|--compress ]
                   file [file ...]
"
HELP="
Options:
        --about         Display information about the program.
        --help          Displays this message.
        --usage         Displays the program's usage.
        --version       Displays the program's version.
        --bzip
                Compress the cycled files with bzip.
        -b, --bzip2
                Compress the cycled files with bzip2.
        -c, --cycle cycles
                Keep 'cycles' number of cycled files. (Default is 3).
        -d, --date
                Append -YYYYMMDDHHMMSS to the cycled files where YYYY is the
                current year; MM is the current month; DD is the current day;
                HH is the current hour; MM is the current minute; and SS is the
                current second.
        --dir dir
                Specify the name of the directory for the cycled files to be
                shifted into.
        -f, --force
                Cycle a file even if it is zero bytes in length.
        -g, --gzip
                Compress the cycled files with gzip.
        -p, --pack
                Compress the cycled files with pack.
        -s, --silent
                Do not display warnings or informational messages.
                Errors will still be displayed.
        -t, --touch
                Create an empty file to replace the cycled file.
        -z, --compress
                Compress the cycled files with compress.
        file
                This is the name of the file to cycle.
"
# Define a restrictive PATH.
#
 export PATH=/usr/xpg4/bin:/usr/bin:/usr/ucb:/usr/local/bin
#export PATH=/bin
# Function to display information about this program.
#
about()
{
        echo
        echo "Copyright (c) 1998 Jim Barber. All rights reserved."
        [[ $change_id != $(eval echo "@(#) \\\$Id\: %\M%,v %\I% %\E% %\U% \\\$" | sed 's/\\//g') ]] && echo "$change_id"
        echo "$ABOUT"
        exit 2
}
# Function to display some help about the program.
#
help()
{
        echo "$USAGE$HELP"
        exit 2
}
# Function to display the usage of this program.
#
usage()
{
        exec >&2
        echo "$USAGE"
        exit 2
}
# Function to display the version of the program.
#
version()
{
        echo
        if [[ $change_id = $(eval echo "@(#) \\\$Id\: %\M%,v %\I% %\E% %\U% \\\$" | sed 's/\\//g') ]]
        then
                echo "cycle_file version 1.1"
        else
                echo $change_id | awk '{printf("cycle_file version %s\n", $4)}'
        fi
        echo
        exit 2
}
# Function to get the argument passed to a long option.
#
# This can't be used if it is valid for the parameter to the long option to
# have a leading '-' (except negative numbers, which are handled correctly).
#
# Example of usage:
#
#       VAR=$(get_long_optarg $OPTARG $OPTIND "$@") || exit ; shift
#
get_long_optarg()
{
        OPTARG=$1
        OPTIND=$2
        shift 2
        if [[ $(eval echo \$$OPTIND) = @(-*) && $(eval echo \$$OPTIND) != @(-)+([0-9])?(.)*([0-9]) || -z $(eval echo \$$OPTIND) ]]
        then
                echo "@basename@: --$OPTARG argument expected" >&2
                usage
        fi
        eval echo \$$OPTIND
}
# Function to convert Access Control Lists to a value suitable for passing to
# the chmod command.
#
acl_to_chmod()
{
        U=$(expr "$1" : '.\(...\)......')
        G=$(expr "$1" : '....\(...\)...')
        O=$(expr "$1" : '.......\(...\)')
        echo "u=$U,g=$G,o=$O" | sed 's/-//g; s/s/sx/g; s/S/s/g; s/t/tx/g; s/T/t/g'
}
# Initialise some parameters.
#
unset COMPRESS DATE DIR FORCE SILENT TOUCH
CYCLES=3
# Parse the command line parameters.
#
OPTIND=1
while getopts 'bc:dfgpstz-:' PARAMS
do
        case "$PARAMS" in
                b) COMPRESS='bzip2 -9' ;;
                c) CYCLES=$OPTARG ;;
                d) DATE=$(date "+%Y%m%d%H%M%S") ;;
                f) FORCE=true ;;
                g) COMPRESS='gzip -9' ;;
                p) COMPRESS=pack ;;
                s) SILENT=true ;;
                t) TOUCH=true ;;
                z) COMPRESS=compress ;;
                -)
                case "$OPTARG" in
                        about)          about ;;
                        help)           help ;;
                        usage)          usage ;;
                        version)        version ;;
                        bzip)           COMPRESS=bzip ;;
                        bzip2)          COMPRESS='bzip2 -9' ;;
                        compress)       COMPRESS=compress ;;
                        cycle)          CYCLES=$(get_long_optarg $OPTARG $OPTIND "$@") || exit ; shift ;;
                        date)           DATE=$(date "+%Y%m%d%H%M%S") ;;
                        dir)            DIR=$(get_long_optarg $OPTARG $OPTIND "$@") || exit ; shift ;;
                        force)          FORCE=true ;;
                        gzip)           COMPRESS='gzip -9' ;;
                        pack)           COMPRESS=pack ;;
                        silent)         SILENT=true ;;
                        touch)          TOUCH=true ;;
                        *)
                        echo "Illegal option --$OPTARG" >&2
                        usage ;;
                esac ;;
                \?)     usage ;;
        esac
done
shift $((OPTIND - 1))
echo $DIR
# Make sure that at least one file name was passed.
#
(( $# < 1 )) && usage
# Make sure that the directory for the log files to to be cycled to exists.
#
if [[ -n $DIR && ! -d $DIR ]]
then
        echo "Error: '$DIR' is not a valid directory."
        exit 1
fi
echo $@
for REAL_FILE in "$@"
do
        # Only do the cycle if the file exists.
        #
        if [[ ! -f $REAL_FILE ]]
        then
                [[ -z $SILENT ]] && echo "File '$REAL_FILE' does not exist. Skipping..." >&2
                RET_CODE=1
                continue
        else
        echo "File exists"
        fi
done
# Set a return code for the program.
#
RET_CODE=0
exit $RET_CODE