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.
_______________________________________________
freebsd-questions@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to "freebsd-questions-unsubscr...@freebsd.org"