• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst] Problem bei Textformatierung mit printf

noms

Member
Hi alle zusammen!

Ich habe, wie in diesem Thread bereits beschrieben,: http://www.linux-club.de/viewtopic.php?f=21&t=103478 ein Problem mit der Textformatierung, innerhalb eines Scripts, mit Hilfe von printf.

Es handelt sich dabei um folgendes Script:
Code:
#! /bin/bash
# Mit diesem Script kann man ein E-Mail mit den Statusinformationen
# des Nagiosrechners versenden.

DATE=$(date)
NAGIOSPROC=$(/usr/local/nagios/libexec/check_nagios -e 5 -F /usr/local/nagios/var/nagios.log -C /usr/local/nagios/bin/nagios)
LOAD=$(/usr/local/nagios/libexec/check_load -w 5.0,4.0,3.0 -c 10.0,6.0,4.0)
USERS=$(/usr/local/nagios/libexec/check_users -w 20 -c 50)
HTTP=$(/usr/local/nagios/libexec/check_http -H localhost)
PING=$(/usr/local/nagios/libexec/check_ping -H localhost -w 3000.0,80% -c 5000.0,100% -p 5)
DISK=$(/usr/local/nagios/libexec/check_disk -w 20 -c 10 -p /)
SSH=$(/usr/local/nagios/libexec/check_ssh -H localhost -p 2323)
SWAP=$(/usr/local/nagios/libexec/check_swap -w 20 -c 10)
PROCS=$(/usr/local/nagios/libexec/check_procs -w 250 -c 400 -s RSZDT)


/usr/bin/printf "################################################################\n\
#%62s#\n#%3sServerleistungsbericht vom $DATE%3s#\n#%62s#\n################################################################\n\n\n\
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\n\
%3s*** Statusinformation des Nagiosprozesses ***\n\n\
%3sNAGIOS-INFO:
%3s$NAGIOSPROC\n\n\
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\n\n\
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\n\
%3s*** Allgemeine Informationen ***\n\n\
%3sLOAD:\n%3sLOAD $LOAD\n\n\
%3sUSERS:\n%3s$USERS\n\n\
%3sHTTP:\n%3s$HTTP\n\n\
%3sPING:\n%3s$PING\n\n\
%3sDISK:\n%3s$DISK\n\n\
%3sSSH:\n%3s$SSH\n\n\
%3sSWAP:\n%3s$SWAP\n\n\
%3sPROCS:\n%3s$PROCS" | /usr/bin/mailx -a 'From: "Nagios" <nagios-test@yahoo.de>' -s "*** Prozessstatus Nagios ***" nagios-test@gmx.net

Das Script bricht mit folgender Fehlermeldung ab:
Code:
/usr/bin/printf: %,: ungültige Umwandlungsangabe

Daraufhin habe ich den Vorschlag von revealed ausprobiert:
Zitat von revealed:
#! /bin/sh
# ( Pfad bei mir anders: ! ):
disktest="$( /usr/lib/nagios/plugins/check_disk -w 20 -c 10 -p /; )";
diskt2="$( /usr/lib/nagios/plugins/check_disk -w 20 -c 10 -p /; )";
diskt3="$( /usr/lib/nagios/plugins/check_disk -w 20 -c 10 -p /; )";

# hm?
/usr/bin/printf "%3s %5s \n \n" "*" "$disktest";
/usr/bin/printf "%10s %10s \n \n" "*" "$diskt2";
/usr/bin/printf "%20s %20s \n \n" "*" "$diskt3";

Das funktioniert bei mir auch! Daraufhin habe ich folgendes probiert:
Code:
test@nagios:~$ DISK=$(/usr/local/nagios/libexec/check_disk -w 20 -c 10 -p /)
test@nagios:~$ echo $DISK
DISK OK - free space: / 32171 MB (91% inode=94%);| /=3139MB;37180;37190;0;37200
test@nagios:~$ /usr/bin/printf "%3sDISK:\n%3s" "$DISK" "\n\n"
DISK OK - free space: / 32171 MB (91% inode=94%);| /=3139MB;37180;37190;0;37200DISK:

Das heist, dass das Problem bei der Formatierung des Textes mit printf liegt! Was mach ich falsch? Habt ihr Ideen dazu?

Ich würde den Text gerne so formatiert angezeigt bekommen:
Code:
   DISK:
   DISK OK - free space: / 32171 MB (91% inode=94%);| /=3139MB;37180;37190;0;37200

Vielen Dank im Voraus!

Beste Grüße,

noms
 

abgdf

Guru
Muß z.B. das mit "/usr/bin" sein? Ist da kein Pfad drauf gesetzt?
Wenn Du Dich schon an Shell-Skripting wagst, solltest Du auch ein bißchen dazu lesen, z.B. "man printf".
Ich habe jedenfalls nicht viel Lust, Dir jedes Einzelproblem zu lösen, bis Dein Skript endlich für Dich bei Dir zu Deiner Zufriedenheit läuft.

Gruß
 
OP
N

noms

Member
Hi abgdf!

Vielen Dank für Deine Mühe und Deinen Beitrag!

Bzgl. dem "/usr/bin": Danke für die Info, es ist ein Pfad darauf gesetzt und ich habe es jetzt geändert! Man printf hat mich leider nicht wirklich weitergebracht, sondern eher probieren, probieren und nochmals probieren! Ich hatte nie vor das Script von anderen schreiben zu lassen, bis es bei mir bis zu meiner Zufriedenheit läuft, auch wenn ich den Eindruck hinterlassen haben sollte. Ich dachte eher, dass man mich mit Hinweisen auf die richtige Spur bringen könnte!

Das Script sieht nun so aus und funktioniert zu meiner Zufriedenheit:
Code:
#! /bin/bash
# Mit diesem Script kann man ein E-Mail mit den Statusinformationen
# des Nagiosrechners versenden.

DATE=$(date)
NAGIOSPROC=$(/usr/local/nagios/libexec/check_nagios -e 5 -F /usr/local/nagios/var/nagios.log -C /usr/local/nagios/bin/nagios)
LOAD=$(/usr/local/nagios/libexec/check_load -w 5.0,4.0,3.0 -c 10.0,6.0,4.0)
USERS=$(/usr/local/nagios/libexec/check_users -w 20 -c 50)
HTTP=$(/usr/local/nagios/libexec/check_http -H localhost)
PING=$(/usr/local/nagios/libexec/check_ping -H localhost -w 3000.0,80% -c 5000.0,100% -p 5)
DISK=$(/usr/local/nagios/libexec/check_disk -w 20 -c 10 -p /)
SSH=$(/usr/local/nagios/libexec/check_ssh -H localhost -p 2323)
SWAP=$(/usr/local/nagios/libexec/check_swap -w 20 -c 10)
PROCS=$(/usr/local/nagios/libexec/check_procs -w 250 -c 400 -s RSZDT)


(printf "%4s################################################################\n\
%4s#%62s#\n%4s#%3sServerleistungsbericht vom $DATE%3s#\n%4s#%62s#\n%4s################################################################\n\n\n\
%4s!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\n\
%4s*** Statusinformation des Nagiosprozesses ***\n\n\
\tNAGIOS-INFO:
\t$NAGIOSPROC\n\n\
%4s!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\n\n\
%4s*** Allgemeine Informationen ***\n\n";
printf "\tLOAD:\n\t%s\n\n" "LOAD $LOAD";
printf "\tUSERS:\n\t%s\n\n" "$USERS";
printf "\tHTTP:\n\t%s\n\n" "$HTTP";
printf "\tPING:\n\t%s\n\n" "$PING";
printf "\tDISK:\n\t%s\n\n" "$DISK";
printf "\tSSH:\n\t%s\n\n" "$SSH";
printf "\tSWAP:\n\t%s\n\n" "$SWAP";
printf "\tPROCS:\n\t%s\n\n" "$PROCS") | /usr/bin/mailx -a 'From: "Nagios" <nagios-test@yahoo.de>' -s "*** Prozessstatus Nagios ***" nagios-test@gmx.net

Wenn ich es ausführe, erhalte ich ein E-Mail mit folgendem Inhalt:
Code:
    ################################################################
    #                                                              #
    #   Serverleistungsbericht vom Don Mai 28 06:27:22 CEST 2009   #
    #                                                              #
    ################################################################


    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    *** Statusinformation des Nagiosprozesses ***

	NAGIOS-INFO:
	NAGIOS OK: 3 processes, status log updated 278 seconds ago

    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


    *** Allgemeine Informationen ***

	LOAD:
	LOAD OK - load average: 0.06, 0.10, 0.04|load1=0.060;5.000;10.000;0; load5=0.100;4.000;6.000;0; load15=0.040;3.000;4.000;0; 

	USERS:
	USERS OK - 1 users currently logged in |users=1;20;50;0

	HTTP:
	HTTP OK HTTP/1.1 200 OK - 360 bytes in 0,003 seconds |time=0,002904s;;;0,000000 size=360B;;;0

	PING:
	PING OK - Packet loss = 0%, RTA = 0.15 ms|rta=0.148000ms;3000.000000;5000.000000;0.000000 pl=0%;80;100;0

	DISK:
	DISK OK - free space: / 32171 MB (91% inode=94%);| /=3139MB;37180;37190;0;37200

	SSH:
	SSH OK - OpenSSH_5.1p1 Debian-3ubuntu1 (protocol 2.0)

	SWAP:
	SWAP OK - 100% free (1462 MB out of 1466 MB) |swap=1462MB;0;0;0;1466

	PROCS:
	PROCS OK: 33 processes with STATE = RSZDT

Für Verbesserungsvorschläge bzw. falls ich gegen irgendwelche Konventionen auf Grund meiner Unwissenheit verstoßen haben sollte, wäre ich dankbar, wenn man mich darüber aufklären würde!

Beste Grüße,

noms
 
Oben