.sh & getopts

Aiza aiza21 at comclark.com
Fri Jun 4 07:29:27 UTC 2010






Steve Bertrand wrote:
> On 2010.06.04 00:35, Aiza wrote:
>> Have this code
>>
>> shift; while getopts :ugr: arg; do case ${arg} in
>>    u) action="freebsd-update";;
>>    g) action="freebsd-upgrade";;
>>    r) action="freebsd-rollback";;
>>    ?) exerr ${cmd_usage};;
>> esac; done; shift $(( ${OPTION} -1 ))
>>
>>
>> Command being executed looks like this, cmd action -flags aaaa bbbb
>>
>> Only a single -flag in allowed on the command.
> 
> Here's my obligatory "use Perl;"
> 
> # it's a dirty hack out of a util script I use that calls
> # methods out of a module. 99% of the code has been stripped,
> # so forgive me, especially for the dirty arg count check ;)
> 
> # save file to test.pl
> # chmod 755 test.pl
> # Examples:
> 
> #  Help:
> #  ./test.pl --help
> #  ./test.pl -h
> 
> # Man page:
> #  ./test.pl --man
> #  ./test.pl -M
> 
> ---- copy/paste below this line, until _END_
> #!/usr/bin/perl
> 
> use strict;
> use warnings;
> 
> use Getopt::Long;
> Getopt::Long::Configure qw( bundling );
> use Pod::Usage;
> 
> if ( $#ARGV > 0 ) {
> 
>     my $arg_num = $#ARGV +1 ;
>     print "\nYou supplied $arg_num args, when only one is allowed\n\n";
> 
>     die "See $0 -h\n\n";
> }
> 
> my ( $help, $man ) = 0;
> 
> my $result = GetOptions(
> 	        	'update|u'    	=> \&update,
> 			'upgrade|g'   	=> \&upgrade,
> 			'rollback|r'  	=> \&rollback,
> 			'help|h'      	=> \$help,
> 			'man|M'		=> \$man,
> 		);
> 
> # begin pod2usage
> 
> pod2usage({ -verbose => 1 }) if $help;
> pod2usage({ -verbose => 2 }) if $man;
> 
> sub update {
> 
> 	print "We're updating!\n";
> 
> 	# do something fancy here..
> 	exit;
> }
> 
> sub upgrade
> {
> 
> 	print "We're upgrading!\n";
> 	# more fancy stuff...
> 	exit;
> }
> 
> sub rollback {
> 
> 	print "Ensure you have a backup, we're rolling back!\n";
> 	# uber fancy!!!
> 	exit;
> }
> 
> 
> 
> =head1 NAME
> 
> perform_maintenance - Do maintenance on FreeBSD
> 
> =head1 SYNOPSIS
> 
>   # Do update
> 
>   ./test.pl --update
>   ./test.pl -u
> 
>   # Do upgrade
> 
>   ./test.pl --upgrade
>   ./test.pl -g
> 
>   # Do a rollback
> 
>   ./test.pl --rollback
>   ./test.pl -r
> 
>   # display help
> 
>   ./test.pl --help
>   ./test.pl -h
> 
>   # display the manual page
> 
>   ./test.pl --man
>   ./test.pl -M
> 
> 
> 
> =head1 OPTIONS
> 
> =over 1
> 
> 
> 
> =item --update | -u
> 
> Do an update... this example simply outputs 'Update' to STDOUT.
> 
> 
> 
> =item --upgrade | -g
> 
> Do an upgrade... this example simply outputs 'Upgrade' to STDOUT.
> 
> 
> 
> =item --rollback | -r
> 
> Perform a rollback... again, of course, we only print out jibberish
> 
> 
> 
> =back
> 
> =head1 DESCRIPTION
> 
> This is a copy/paste of a real-life Perl application that has been
> cleared out of all useful code, so it could be used as an example.
> 
> It is however an extremely handy framework for accepting both the long
> and short forms of parameters, and the perldoc inclusion allows one to
> dump 'error' (or more favourably put) help pages onto STDOUT for the user.
> 

Steve Bertrand  as the subject says .sh not perl.




More information about the freebsd-questions mailing list