Perlanfaenger: Shellkommandos vom Perl ausfuehren lassen

Post Reply
Message
Author
jakob
Posts: 6
Joined: 31. May 2002 9:44

Perlanfaenger: Shellkommandos vom Perl ausfuehren lassen

#1 Post by jakob »

Hallo zusammen,

ich bin blutiger Perlanfaenger und moechte nur das Perl ein
Shellkommando fuer mich ausfuehrt, und ich dann mit dem Ergebniss
des Kommandos arbeiten, oder es ausgeben kann.

Bsp.:

---

#!/usr/bin/perl
$time = 'uptime';
print $time;

---

Jetzt bekomm ich nur "uptime" und nicht das Uptimeergebniss zu sehen.

Weiss jemand was ich falsch mache?

Gruss,

Jakob

Labba

Re: Perlanfaenger: Shellkommandos vom Perl ausfuehren lassen

#2 Post by Labba »

Du weißt der Variable $time den String 'uptime' zu. Das Beispiel ist wohl eher für die Shell geschrieben und nicht für Perl.

Sowei ich weiß gibt es einen Aufruf : system(), bin mir aber nicht sicher, ob ich das nicht nur mit C verwechsle oder daher kenne.

Chris

Re: Perlanfaenger: Shellkommandos vom Perl ausfuehren lassen

#3 Post by Chris »

Hi!

<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
#!/bin/perl
$time=system("date");
print $time;
</font><hr></pre></blockquote>


Gruß
Chris

Chris

Re: Perlanfaenger: Shellkommandos vom Perl ausfuehren lassen

#4 Post by Chris »

Natürlich nicht "date", sonder "uptime"...

Jakob

Re: Perlanfaenger: Shellkommandos vom Perl ausfuehren lassen

#5 Post by Jakob »

Hallo Chris,

danke fuer dein Posting. Das hat mich schon sehr
weitergebracht.

Doch mein Programm, das die mailq abfragt geht
nicht ganz:

---

#!/usr/bin/perl
$mail=system("mailq");
if $mail="/var/spool/mqueue is empty"{
print "Mails sind erfolgreich versendet worden";
} else {
print "Leider konnte die Mails nicht versendet werden";

---

syntax error at ./time line 3, near "if $mail"
Execution of ./time aborted due to compilation errors.

Kann der bei if $mail die Variable nicht auslesen?

Kennst du vielleicht eine Loesung des Problems?

Gruss,

Jakob

Jochen

Re: Perlanfaenger: Shellkommandos vom Perl ausfuehren lassen

#6 Post by Jochen »

1. Vergleich wird in perl wie in C mit "==" geschrieben, nicht mit "=" (Zuweisung).

2. Klammern um den Ausdruck nach if.

3. else-Block hat keine schliessende geschweifte Klammer.

Fazit:<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
#!/usr/bin/perl
$mail=system("mailq");
if ($mail == "/var/spool/mqueue is empty") {
print "Mails sind erfolgreich versendet worden";
} else {
print "Leider konnte die Mails nicht versendet werden";
}</font><hr></pre></blockquote>
Besser so?

Jochen

Jakob

Re: Perlanfaenger: Shellkommandos vom Perl ausfuehren lassen

#7 Post by Jakob »

Hallo Jochen,

es geht leider noch nicht so ganz:

kirk@kirk:~/perl> ./mail
/var/spool/mqueue is empty
Mail versendet!

Passt, aber:

[mail:kirk]~/perl$ ./mail
/var/spool/mqueue (4 requests)
----Q-ID---- --Size-- -----Q-Time----- ------------Sender/Recipient------------
g57EOp900553 275 Fri Jun 7 14:24 <kirk@jakobroehrl.de>
<klaus_t@nickles.de>
g57EN4900548 370 Fri Jun 7 14:23 <kirk@jakobroehrl.de>
<klaus_t@nickles.de>
g57EO7900551 435 Fri Jun 7 14:24 <kirk@jakobroehrl.de>
<klaus_t@nickles.de>
g57Eab900646 561 Fri Jun 7 14:36 <kirk@jakobroehrl.de>
<klaus_t@nickles.de>
Mail versendet!
^^^^^
Falsch!

Weisst du warum?


Gruss,

Jakob

Jochen

Re: Perlanfaenger: Shellkommandos vom Perl ausfuehren lassen

#8 Post by Jochen »

Wenn er immer in den then-Zweig rennt, muss der Ausdruck nach if immer logisch wahr ergeben. Dort würde ich mal nach den Fehler suchen. Hast Du die Lösung mittels Copy'n'Paste übernommen oder abgetippt? Speziell der Punkt 1 ("==" Vergleich, "=" Zuweisung) wird immer gerne falsch gemacht und führt zum ewig wahren Ausdruck.

Jochen

Jakob

Re: Perlanfaenger: Shellkommandos vom Perl ausfuehren lassen

#9 Post by Jakob »

Hi Jochen,

ja ich hab das Script per kopieren/einfuegen uebernommen. Das Problem ist diese Zeile:

if ($mail == "/var/spool/mqueue is empty") {

Es interessiert ihn gar nicht was zw den " " steht.

Weisst du warum?

Gruss,

Jakob

ratte

Re: Perlanfaenger: Shellkommandos vom Perl ausfuehren lassen

#10 Post by ratte »

<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
#!/usr/bin/perl
$mail=`mailq`; # backtickets um mailq herum senden returns zur Variable
if ($mail=~ /\/var\/spool\/mqueue is empty/) # pattern matching with regualar expression
{
print "Mails sind erfolgreich versendet worden";
} else {
print "Leider konnte die Mails nicht versendet werden";
}
</font><hr></pre></blockquote>

ratte

Jakob

Re: Perlanfaenger: Shellkommandos vom Perl ausfuehren lassen

#11 Post by Jakob »

Hallo Ratte,

es funkt - vielen Dank.

Gruss,

Jakob

Post Reply