Wednesday, November 16, 2011
Monday, October 31, 2011
Perl Quick Start Template
When starting a new script, you can use this template as a base which consists of:
- RCS, CVS or SVN "Id" keyword to keep the version information.
- Support script arguments.
- Show usage function.
- A trim function.
#!/usr/bin/perl -w
# $Id: $
#
use strict;
use Getopt::Long;
my $VERSION = "1.0";
my %option;
die unless GetOptions(
"help" => \$option{'help'},
);
if (defined( $option{'help'} )) {
print_usage();
}
...
# Perl trim function to remove whitespace from the start and end of the string
sub trim {
my $string = shift;
$string =~ s/^\s+//;
$string =~ s/\s+$//;
return $string;
}
# Print usage
sub print_usage {
my $usage = <<EOF;
DESCRIPTION:
OPTIONS:
--[h]elp Show this help text.
EXAMPLE:
\$ $0
EOF
die($usage);
}
Saturday, October 8, 2011
How to Change Linux Password via SSH
Script to change Linux password remotely via SSH.
Prerequisite
For ActivePerl users, you need to download the Net::SSH2 package.
Version 5.10.x
C:\>ppm install http://cpan.uwinnipeg.ca/PPMPackages/10xx/Net-SSH2.ppd
Version 5.12.x
C:\>ppm install http://cpan.uwinnipeg.ca/PPMPackages/12xx/Net-SSH2.ppd
Scripts
#!/usr/bin/perl
use strict;
use Net::SSH2;
use Getopt::Long;
my %option = (
'server' => 'localhost',
'userid' => '',
'password' => '',
'newpassword' => '',
);
if (!GetOptions("server|s=s" => \$option{'server'},
"userid|u=s" => \$option{'userid'},
"password|p=s" => \$option{'password'},
"newpassword|n=s" => \$option{'newpassword'})) {
print_usage();
}
my $ssh2 = Net::SSH2->new();
$ssh2->connect($option{'server'}) or die "Unable to connect Host $option{'server'} \n";
$ssh2->auth_password($option{'userid'}, $option{'password'}) or die "Unable to login\n";
my $chan = $ssh2->channel();
$chan->blocking(0);
$chan->ext_data('merge');
my $cmd = "chage -l $option{'userid'}; "
. "echo -e \"$option{'password'}\\n$option{'newpassword'}\\n$option{'newpassword'}\\n\" | passwd 2>&1\n";
# print $cmd;
$chan->exec($cmd);
while (<$chan>) {
print $_;
}
#########################################################################
# Subroutines
#########################################################################
sub print_usage {
# ...
}
Saturday, April 2, 2011
Check for Holiday with Perl
In some cases we would like to avoid to execute the script during public holiday e.g. Don’t send alert during holiday. This script contains 2 functions i.e. “load_holiday_file” and “is_holiday” where you can include in your script to check for holiday.
#!/usr/bin/perl use strict; my @holidays = (); my @now = localtime(time()); my $date = sprintf("%02d-%02d-%04d", $now[3], $now[4]+1, $now[5]+1900 ); load_holiday_file(\@holidays, 'holiday.txt'); if (is_holiday(\@holidays, $date)) { print "Today is holiday"; } # Check the date is holiday # "date_to_check" is in "DD-MM-YYYY" format. sub is_holiday { my $holidays = shift; my $date_to_check = shift; my $counter = 0; my $found = 0; while($counter <= $#{holidays} && !$found) { my $holiday = $holidays->[$counter]; if ($date_to_check =~ /^$holiday/) { $found = 1; } else { $counter++; } } return $found; } # Load holiday file # Holiday file # 1. DD-MM-YYYY # 2. DD-MM (Every year on this date) sub load_holiday_file { my $holidays = shift; my $holiday_file = shift; if (open(HOLIDAY_FILE, $holiday_file)) { my $line; while (defined($line = <HOLIDAY_FILE>)) { chomp($line); next if ($line =~ /^\s*#/ ); next if ($line =~ /^$/); # Trim the string $line =~ s/^\s+//; $line =~ s/\s+$//; push @{holidays}, $line; } close(HOLIDAY_FILE); } }Holiday File
# Holiday file # 1. DD-MM-YYYY # 2. DD-MM (Every year on this date) 27-01-2011 03-02-2011 03-02-2011 22-04-2011 02-05-2011 17-05-2011 09-08-2011 30-08-2011 26-10-2011 06-11-2011 26-12-2011 02-01-2012
Subscribe to:
Posts (Atom)