[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]

Subject: Re: bash problem
From: Dirk Essl
Date: 14 Jul 2005 11:22:37 -0000



Am 14.07.2005 um 08:19 schrieb Bernhard 'Gustl' Bauer:


Hallo,

Hi,


ich habe da ein Script das die Anzahl der Mails in einer mailbox ermitteln soll. Die Anzahl steht nach dem 1. ':' der Ausgabe von 'mail -f <mbox>' Wenn aber Sonderzeichen in den Mails vorkommen gibts Probleme.

Hier ein Teil des scripts:
-----------
#!/bin/bash

MAILFILE="$1"
LOGFILE="/var/log/mailtest.log"
#gustl/6.4.05 anderer Pfad
#MAIL="/usr/bin/mail"
MAIL="/bin/mail"

# das Mailfile lesen um die Anzahl der Mails zu bestimmen
MAILOUT1=`$MAIL -f $MAILFILE <<EOF
q
EOF `

echo "mailout1:            $MAILOUT1"
MAILOUT=`echo $MAILOUT1 | head -c 20 `
echo "mailout:            $MAILOUT"

exit
-------------

mailout enthält alles bis zum problematischen Sonderzeichen. mailout1 enthält alles ab diesem Sonderzeichen. Ich würde aber erwarten das mailout1 die ersten 20 Zeichen von mailout enthält.

Kann mir jemand erklären was ich falsch mache?

Nein, aber nimm doch einfach perl:


<snip>
#!/usr/bin/perl -w

# Checks to see how many new mail messages are in the inbox.
# Change the value of $mailbox to your Unix mail spool.

use strict;
my $old_messages   = 0;
my $total_messages = 0;
my $new_messages   = 0;
my $headers        = 0;
my $mailbox        = "/Users/dessl/mbox";

my $VERSION = 1.1;

open(MAILBOX, "<$mailbox") or die "Couldn't open $mailbox for reading: $!\n";

MESSAGE:
while (<MAILBOX>) {
        if (/^From /) { #Start of the header block
                $headers = 1;
        } elsif (/^$/) { #End of the header block
                $headers = 0;
        }

        if ($headers == 0) {
                next MESSAGE;
        }

if (/^From: /) { #One From: header per message
$total_messages++;
} elsif (/^Status: /) { #Only the read messages have the Status: header
$old_messages++;
}
}
close(MAILBOX);


$new_messages = $total_messages - $old_messages;
print "There are $new_messages new message(s), and $total_messages total message(s) in your inbox.\n";
</snip>



TIA

Gustl


Grüsse,
Dirk