PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : perl zu ksh konvertieren?!



FlorianL
03-07-2007, 09:58
Hallo zusammen, ich hab mir ein simples perlscript gebastelt das files per tar und gzip packt und nen date-string anhängt, funktioniert auch tadellos, blöderweise stellt sich jetzt raus das die funktion in ein bestehendes (ksh-)shellscript eingegliedert werden muss.

Ich halte perlscripts für die besseren shellscripts und habe auch einfach keine ahnung davon, weil ichs wie gesagt, für sinnlos halte, man schraenkt sich ja nur ein damit...

genug von meiner persönlichen meinung, anforderung ist anforderung und so wirds halt gemacht...

kann mir jemand nen kleinen stoß in die richtige richtung geben? hier ist erstmal mein script damit ihr wisst wovon ich sprech:


#!/usr/bin/perl
#
# Logfile rotation Script
#
# Usage: logroll.pl <logfile>
#
# Author: F.L.
# Version: 1.0 Date: 03.07.2007
#
######################################
use strict; # Keine globalen Variablen zulassen
use warnings; # Warnungen ausgeben

my $inputfile = $ARGV[0]; # Parameter einlesen und der Variable zuweisen

sub tarzip {
# unix-date zu human readable konvertieren
my $datestring = scalar(localtime);
# aufsplitten des strings in einzelne variablen
my @date = split(/ /, $datestring);
# unseren date-string formatieren
my $dateformat = ("$date[1].$date[5]");
# logfile input
my $input = shift;
# tar
system("/usr/bin/tar -cvf $input.tar $input");
# gzip
system("/usr/bin/gzip $input.tar");
# Datum anhaengen
my $output = ("$input.$dateformat.tgz");
system("mv $input.tar.gz '$output'");
# Wenn tgz vorhanden, original loeschen, aber auch nur dann...
if (-e "$input.$dateformat.tgz") {
print("\nLogfile packed, deleting orgin\n");
unlink $input or die "Error: Cant delete orgin file $input";
} else { print "ERROR, .tgz NOT created, stopping..." and die "1"; }
}

# Funktion ausfuehren
tarzip($inputfile);


wow, so viel kommentiert hab ich noch nie! ;)

packen usw. ist klar, nur die funktion mit dem datestring werd ich unter ksh bestimmt nicht mal eben so hinbekommen, hat dazu jemand nen einzeiler?

und wie prüfe ich unter ksh ob eine datei existiert? bei perl ists ja -e "file"

vielen dank im vorraus :)

-Florian

FlorianL
03-07-2007, 10:17
ein stück weiter bin ich schonmal, date |awk '{print $2}' gibt mir den monatsnamen, das is doch schonmal was :)

FlorianL
03-07-2007, 11:59
MONTH=`date +%b`;
DAY=`date +%d`;
YEAR=`date +%y`;

/usr/bin/gzip /var/adm/wtmp;
mv /var/adm/wtmp.gz /var/adm/wtmp_$DAY$MONTH20$YEAR.gz;
cp /dev/null /var/adm/wtmp;


hässlig, aber funktional... ;)

jeebee
03-07-2007, 15:35
wieso nicht einfach

#!/bin/ksh
inputfile=$1
DATESTRING=`date +%d%b%Y`
outputfile=$1_$DATESTRING.tar.gz
tar czf $outputfile $inputfile
tar czf (create gzip filename) erspart dir das extra-gzip
date +%d%b%Y gibt dir Tag (2Stellig), Monat (3Buchstaben) und Jahr (4Stellig) zurück (reihenfolge TagMonatJahr).
$1 bezieht sich auf das erste Kommandozeilen-Argument ($0 ist der "Name" des Skripts)

FlorianL
04-07-2007, 08:27
Guten morgen :)


mv /var/adm/wtmp.gz /var/adm/wtmp_$DAY$MONTH20$YEAR.gz;

funktioniert so auch nicht durch das 20, aber mit %Y gehts ja auch mit 4 digits...

deinen datestring hab ich übernommen, hätt ich eigendlich auch selbst drauf kommen können :P


# **************************************************
# tidy wtmp
# **************************************************
tidy_wtmp()
{

dsp_banner "Tidy WTMP"

if [ ! -r "$F_WTMP" ]
then
echo "Warning : wtmp does not exist"
return 1
fi

DATESTRING=`date +%d%b%Y`

# Numeric datecode is the 1st?
if [ `date +%e` == 1 ]
then
/usr/bin/gzip /var/adm/wtmp;
mv /var/adm/wtmp.gz /var/adm/wtmp_$DATESTRING.gz;
cp /dev/null /var/adm/wtmp;
echo "wtmp rolled over"
fi

return 0
}