To see how this is used return to this tutorial index.
#!/bin/ksh -u # How to process long options in the shell. # This works with: # * the Korn shell: # pdksh -- a clone of the Korn shell (ksh) # KSH-93 -- the KornShell by David Korn of AT&T Bell Laboratories. # * bash, not sure which versions # This is a simpler script that just recognised --help, which is often enough # **** Shell Script Template **** # SCCS: @(#) 1.4 10/20/21 23:19:25 # Author: Alain D D Williams, addw@phcomp.co.uk, 2009 PROGNAME=${0##*/} Verbose=0 # Print the message to stderr and exit. function Die { echo "$PROGNAME: $*" >&2 exit 2 } # Generate a note that will be seen by the user -- even if redirected function Note { (( Verbose > 0 )) && echo "$PROGNAME: $*" >&2 } # Print a usage message & exit the program. # If an argument is given print that as an error and exit 1 function Usage { (( $# > 0 )) && echo "$PROGNAME: $*" >&2 cat <<-! This program does X Y Z Usage: $PROGNAME [-opts] [files ...] -d Something that takes an argument -v Verbose (multiple use gives more verbosity) -x, --help eXplain Version: 1.4 10/20/21 ! exit $# } # Parse options, recognise the --help option while (( $# >= OPTIND )) && eval A=\${$OPTIND} || A= if [[ $A == --help ]] then (( OPTIND++ )) opt=help else getopts :d:vx opt fi do case "$opt" in d) echo "Dee arg=$OPTARG" ;; v) (( Verbose++ )) ;; x|help) Usage ;; :) Usage "Missing argument to option '$OPTARG'" ;; \?) Usage "Unknown option '$OPTARG'" ;; *) Usage "Internal program error, unrecognised argument '$opt'" ;; esac done shift $(( OPTIND - 1 )) echo "Verbose=$Verbose" echo "End opts processing - OPTIND=$OPTIND, #args: $#" (( $# >= 1 )) && echo "Args are: $@" # Now process the arguments as files: for file do Note "Processing $file" # Do something [[ -f $file ]] && ls -l $file || Die "Cannot see $file" done # end
Return to this tutorial index.