ioc0 phy 0 scsi_id 1 HITACHI HUS153014VLS300 A598, 136 GB, state ONLINE, flags OUT_OF_SYNC
ioc0 phy 2 scsi_id 1 HITACHI ST3300657SS-H A598, 136 GB, state ONLINE, flags OUT_OF_SYNC
Quotephy: 0, size: 136 GB, state: ONLINE, flags: OUT_OF_SYNC
1 2 3 4 5 6 7
if($zeile =~ m/OUT_OF_SYNC/g){ $ausgabe=$zeile; my ($phy) = $ausgabe =~ /phy\s(\w.+)/; my ($state) = $ausgabe =~ /state\s(\w.+)/; my ($flags) = $ausgabe =~ /flags\s(\w.+)/; printf "phy: $phy, state: $state, flags: $flags"; }
1 2 3 4 5 6 7 8 9
my $zeile = 'ioc0 phy 0 scsi_id 1 HITACHI HUS153014VLS300 A598, 136 GB, state ONLINE, flags OUT_OF_SYNC'; if($zeile =~ m/OUT_OF_SYNC/g){ my $ausgabe=$zeile; my ($phy) = $ausgabe =~ /phy\s(\w.+)/; my ($state) = $ausgabe =~ /state\s(\w.+)/; my ($flags) = $ausgabe =~ /flags\s(\w.+)/; printf "phy: $phy, state: $state, flags: $flags"; }
QuoteCode (perl): (dl )my ($phy) = my $ausgabe =~ /phy\s(\w.+)/;
my $ausgabe=$zeile;
Quoteedit: In Zeile 2 wäre es dagegen angebracht:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
use strict; use warnings; while ( my $zeile = <DATA> ) { if ( $zeile =~ /OUT_OF_SYNC/ ) { my $ausgabe = $zeile; # <--- Unnötig, verwende $zeile my ($phy) = $ausgabe =~ /phy\s(\w+)/; my ($state) = $ausgabe =~ /state\s(\w+)/; my ($flags) = $ausgabe =~ /flags\s(\w+)/; printf "phy: $phy, state: $state, flags: $flags\n"; } } __DATA__ ioc0 phy 0 scsi_id 1 HITACHI HUS153014VLS300 A598, 136 GB, state ONLINE, flags OUT_OF_SYNC ioc0 phy 2 scsi_id 1 HITACHI ST3300657SS-H A598, 136 GB, state ONLINE, flags OUT_OF_SYNC
1 2 3 4 5 6
if ( $zeile =~ /OUT_OF_SYNC/ ) { my ($phy) = $zeile =~ / \b phy \s+ (\w+) /x; my ($state) = $zeile =~ / \b state \s+ (\w+) /x; my ($flags) = $zeile =~ / \b flags \s+ (\w+) /x; printf "phy: $phy, state: $state, flags: $flags\n"; }
1
2
3
ioc0 vol_id 0 type IM, 2 phy, 135 GB, state DEGRADED, flags ENABLED RESYNC_IN_PROGRESS
ioc0 phy 0 scsi_id 1 HITACHI HUS153014VLS300 A598, 136 GB, state ONLINE, flags OUT_OF_SYNC
ioc0 phy 2 scsi_id 1 HITACHI ST3300657SS-H A598, 136 GB, state ONLINE, flags OUT_OF_SYNC
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
use strict; use warnings; my @Zeilen = (""); my $status = 3; # Wenn kein Status dann 3 (UNKNOWN) my @knownTypes = qw( ONLINE RESYNC_IN_PROGRESS MISSING OUT_OF_SYNC OFFLINE ); my $typeRegExp = join( '|', @knownTypes ); $typeRegExp = qr/ \b $typeRegExp \b /x; # RegExp nur einmal kompilieren open( my $dataFH, '<', 'test4' ) or die "Datei nicht gefunden\n"; ZEILE: while ( my $zeile = <$dataFH> ) { if ( $zeile =~ / \b OPTIMAL \b /x ) { exit 0; # <--- Wirklich Programm beenden? next ZEILE; # oder nächste Zeile? } if ( $zeile =~ /$typeRegExp/ ) { my ($phy) = $zeile =~ / \b phy \s+ (\w+) /x; my ($state) = $zeile =~ / \b state \s+ (\w+) /x; my ($flags) = $zeile =~ / \b flags \s+ (\w+) /x; print "phy: $phy, state: $state, flags: $flags\n"; next ZEILE; } print "UNKNOWN\n"; } close( $dataFH );
1 2 3 4 5 6 7 8 9 10
{ next if $zeile =~ / \b OPTIMAL \b /x; if ( $match ) { } else { print "UNKNOWN\n"; } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14
while ( my $zeile = <$dataFH> ) { exit 0 if $zeile =~ / \b OPTIMAL \b /x; # Ausstieg bei erster Zeile mit OPTIMAL if ( $zeile =~ /$typeRegExp/ ) { my ($phy) = $zeile =~ / \b phy \s+ (\w+) /x; my ($state) = $zeile =~ / \b state \s+ (\w+) /x; my ($flags) = $zeile =~ / \b flags \s+ (\w+) /x; print "phy: $phy, state: $state, flags: $flags\n"; } else { print "UNKNOWN\n"; } }
2014-04-15T12:38:03 SCORRPiOJedoch müsste ich es etwas erweitern da ich je nach fall einen anderen Exit-code ausgeben muss (Online=0 RESYNC_IN_PROGRESS=1 MISSING/OUT_OF_SYNC/OFFLINE=2)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
use strict; use warnings; my $status = 3; # Wenn kein Status dann 3 (UNKNOWN) my %exitCodes = ( OPTIMAL => 0, RESYNC_IN_PROGRESS => 1, MISSING => 2, OUT_OF_SYNC => 2, ONLINE => undef, OFFLINE => undef, ); my $typeRegExp = join( '|', keys %exitCodes ); $typeRegExp = qr/ \b $typeRegExp \b /x; # RegExp nur einmal kompilieren open( my $dataFH, '<', 'test4' ) or die "Datei nicht gefunden\n"; while ( my $zeile = <$dataFH> ) { if ( $zeile =~ /($typeRegExp)/ ) { if ( defined $exitCodes{$1} ) { exit $exitCodes{$1}; } my ($phy) = $zeile =~ / \b phy \s+ (\w+) /x; my ($state) = $zeile =~ / \b state \s+ (\w+) /x; my ($flags) = $zeile =~ / \b flags \s+ (\w+) /x; print "phy: $phy, state: $state, flags: $flags\n"; } else { print "UNKNOWN\n"; } } close( $dataFH );
2014-04-15T13:17:02 SCORRPiOhab nur dein
if ( defined $exitCodes{$1} )exit $exitCodes{$1};
verschoben nach der print Ausgabe, dann hab ich auch meine Ausgabe :)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
my $exitWith; while ( my $zeile = <$dataFH> ) { if ( $zeile =~ /($typeRegExp)/ ) { if ( defined $exitCodes{$1} ) { $exitWith = $exitCodes{$1}; } my ($phy) = $zeile =~ / \b phy \s+ (\w+) /x; my ($state) = $zeile =~ / \b state \s+ (\w+) /x; my ($flags) = $zeile =~ / \b flags \s+ (\w+) /x; print "phy: $phy, state: $state, flags: $flags\n"; exit $exitWith if defined $exitWith; # <--- EDIT: Bedingung ergänzt } else { print "UNKNOWN\n"; } }
1
2
3
4
5
6
7
8
9
10
11
- Nimm eine Zeile,
- Enthält sie ein Reizwort?
- Wenn ja:
- ist diesem Wort ein exit-code zugeordnet?
- Wenn ja:
- Gib die Zeile aus und beende das Programm mit dem exit-code
- sonst:
- ...
- sonst:
- gib "UNKNOWN" aus
- da capo, solange noch Zeilen da sind