starbuck86
-
Gesamte Inhalte
39 -
Benutzer seit
-
Letzter Besuch
Inhaltstyp
Profile
Forum
Downloads
Kalender
Blogs
Shop
Beiträge von starbuck86
-
-
Keiner eine Idee?
-
Da ist schon ein Unterschied.
Mit deiner Suche könntest du auch finden "aaaaaabbbbbb2bbbbbbbbeeeeee".
Eure beiden Antworten kombiniert + X könntest Du schreiben:
if ( $id && $id =~ m/^[0-9]+\z/ && $id !~ m/^[a-zA-Z]\z/ ) { ... }
Dabei definieren:
^ = Stringanfang == .$id
\z = Stringende == $id.
-
Hallo Com.
Ich hab mal wieder ein kleines Problem, das ich mit diverser Fachliteratur ohne Anhaltspunkt nicht loesen kann.
Vielleicht koennt ihr mir helfen?!
Eine Subroutine in meinem Script sieht wie folgt aus:
79 sub se_output { 80 81 #AUsgabe aller PODs einer SE 82 83 my $msc="$_[0]"; 84 open(PODTREE, "/XXX/report/seclist_podtree") 85 or die "ERROR: seclist_podtree nicht gefunden. DO: seclist -update"; 86 my @podtree=<PODTREE>; 87 close(PODTREE); 88 my @setree=grep /$msc/,@podtree; 89 my $zaehler=1; 90 foreach my $i (@setree) { 91 my @{"splitted$zaehler"} = split(/:/,$i); 92 $zaehler++; 93 } 94 for (my $s=1;$s <= $zaehler;$s++) 95 { 96 print "\n Datenfiles ($msc): /YYY/${"splitted$s\[2\]"}\n"; 97 for (my $zz=1;$zz<=$termsz;$zz++) { 98 print "*"; 99 } 100 qx(rsh priv$msc -l f223 "/XXX/scripts/seclist_ext ${"splitted$s\[2\]"} $msc"); 101 open(DPOUT,"/XXXreport/seclist_$msc\_${"splitted$s\[2\]"}\_tmp"); 102 while(defined(my $i = <DPOUT>)) { 103 print $i; 104 } 105 close(DPOUT); 106 unlink("/XXX/report/seclist_$msc\_${"splitted$s\[2\]"}\_tmp"); 107 for (my $zz=1;$zz<=$termsz;$zz++) { 108 print "*"; 109 } 110 } 111 } 112 113 114 115 sub create_sfrtree { 116 117 #Quelltext zur Erstellung eines
Fuer die Routine ist noch kein Aufrufszenario im Hauptteil des Skripts programmiert. Es existiert bisther nur die Methodendefinition. Wenn ich das Skript jetzt aufrufe schaut sich ja der Compiler den ganzen Quelltext an und findet in dieser Routine diverse Fehler:<HOSTNAME>:-::/XXX/scripts > seclist Bareword found where operator expected at seclist line 114, near ""/XXX/report/seclist_$msc\_${"splitted" (Missing operator before splitted?) Backslash found where operator expected at seclist line 114, near "$s\" (Missing operator before \?) Backslash found where operator expected at seclist line 114, near "2\" (Missing operator before \?) String found where operator expected at seclist line 114, near "]"}\_tmp"" (Missing operator before "}\_tmp"?) Bareword found where operator expected at seclist line 105, near ""/XXX/report/seclist_$msc\_${"splitted" (Missing operator before splitted?) Backslash found where operator expected at seclist line 105, near "$s\" (Missing operator before \?) Backslash found where operator expected at seclist line 105, near "2\" (Missing operator before \?) String found where operator expected at seclist line 105, near "]"}\_tmp"" (Missing operator before "}\_tmp"?) Global symbol "$termsz" requires explicit package name at seclist line 97. Global symbol "$termsz" requires explicit package name at seclist line 115. syntax error at seclist line 114, near ""/XXX/report/seclist_$msc\_${"splitted" syntax error at seclist line 105, near ""/XXX/report/seclist_$msc\_${"splitted" Execution of seclist aborted due to compilation errors.
Der Fehler mit $termsz ist mir klar, da fehlt die Variablendefinition. Also:my $termsz=qx(/usr/bin/tput cols);
Aber was mache ich bei Definition/Aufruf der Arrays mit einer fortlaufenden Variable im Namen falsch?
Und: Fehler in Zeile 114. Die Zeile ist leer?!?!
Danke im Vorraus && Gruss
starbuck
-
In PERL wäre das wohl auf diese Art und Weise zu lösen.
#!/usr/bin/perl #/home/user/readmyself.pl open(MYSELF,"/home/user/readmyself.pl"); while(defined(my $i = <MYSELF>)) { print $i; } close(MYSELF);
Gruß
//edit: oh, das zählt ja gar nicht. Naja ich lass es jetzt trotzdem mal stehen :-)
-
Hallo Community.
Ich habe mal wieder ein kleines Problem an dem ich nicht weiterkomme.
Und zwar hab ich jetzt ein Programm geschrieben, mit verschiedenen Subroutinen, die alle lokal ausgeführt werden können.
Das ganze schaut dann in etwa so aus:
#!/usr/bin/perl if ($ARGV[0] eq "intern") { pfad() } elsif ($ARGV[0] eq "extern") { qx(rsh server10 -l toor " ??? "); } sub pfad { qx(echo $PATH); }
Wie mache ich das jetzt, dass ich die Routine auf dem entfernten Rechner ausführe, ohne eine neue Perl-Datei in einem Verzeichnis auf dem Server anzulegen, welche diese Routine beinhaltet??
Kann ich diese Routine irgendwie mitgeben?
Vielen Dank im Vorraus && Gruß
starbuck11
-
Ja, also ich lerne auch gerade Perl und benutze dazu das Perl-Tutorial von perl-seiten.homepage.t-online.de. Dazu ist zu sagen, dass es leider keine Übungen gibt nach den jeweiligen Themen.
Aber ansonsten ist es sehr umfangreich und für den Anfang gut verständlich.
-
Danke. Das war das was ich gesucht habe.
Nachdem Aufteilen mit split kann ich ja sec99 abfragen durch.
$secnr=$Woerter[2];
Gruß
********************************************************
Das habe ich jetzt nicht ganz verstanden:
while($Satz =~ /$Suchwort/g) {
push(@Positionen, pos($Satz));
}
Das ist doch eine Endlosschleife?
Was macht das "../g) {.."?
Oder heisst das, wenn ich einen String suche in meinem Satz, den dann einem Array zuzuweisen?
ja mit substr habe ich schon gearbeitet.
Left / right sind mir noch neu.
Gruß
starbuck
-
Hallo zusammen.
Gestern bash heute perl. Abwechslung muss sein. :-)
Zu meinem Problem:
Ich würde gerne in Perl ein Skript schreiben, mit dem ich aus einem String etwas herausziehen kann.
Der gewöhnliche String sieht so aus:
dgene:dnt:sec99:ee20:1:p-dnt:beta:
Nun möchte ich zum Beispiel den String nach dem 2. Doppelpunkt (also sec99) extrahieren.
Wie geht man so etwas an?
Kann mir da jemand etwas helfen?
Danke && Gruß
starbuck
-
Jop hat funktioniert. Hatte vorhin n Fehler drin, sodass er mir die backslash escapes nicht erkannt hat.
Danke noch mal für den Denkanstoss, vic:
Lösung war folgende:
****************
#!/bin/bash tput civis terml=`tput lines` sterml=`expr $terml - 1` for i in Hello Hallo Welcome Bonjour Salve Servus ; do echo -e "\e[${sterml};1H" echo -en $i echo -e "\e[${sterml};1H" sleep 2 echo -en "\e[J" done tput cvvis exit 0
Gruß
starbuck
-
Clear löscht den ganzen Bildschirm. Ich will nur 1 Zeile löschen/ersetzen.
-
Das hat mir grad ehrlich gesagt nicht so wirklich auf die Sprünge geholfen.
In diesem Fall laufen die Zeilen untereinander ab, genau das was ich jetzt schon habe.
Gruß
-
Hallo zusammen.
Ich bin gerade leicht am verzweifeln.. zu meinem Problem:
Ich schreibe seit einiger zeit Shell-Skripte und kenne noch nicht alle Möglichkeiten, die ein Shell-Skript mir bietet.
Und zwar geht es um mein aktuelles Projekt.
Ich habe ein Skript geschrieben, dass auf verschiedenen Servern verschiedene Informationen abruft und auf dem Bildschirm ausgibt. Um es genauer zu sagen, es sind bis zu 200 verschiedene Informationspakete, die am Host-Rechner eintreffen.
Um dem User dieses Skripts einen Status zu geben, wie weit es ist hab ich eine einfach echo-Ausgabe pro Informationspaket.
Also sieht meine Ausgabe so aus:
>> /server1/pfad/fcb >> /server2/pfad/fcb >> /server3/pfad/fcb ... >> /server200/pfad/fcb
Da mir dies aber zu viel Platz auf dem Bildschirm verbraucht, möchte ich nun, dass die echo-Ausgaben sich gegenseitig überschreiben. Also, dass sobald das neue Informationspaket eingetroffen ist, die aktuelle Echo-Ausgabe auf dem Bildschirm durch eine neue ersetzt wird, sodass ich nur 1 Zeile für den Status benötige. Jetzt ist die Frage, wie man das realisiert. Ich habe versucht das ganze über ANSI-Escape-Sequenzen zu lösen. Hier mal ein einfaches Beispiel:#!/bin/sh for i in Hello Bonjour Welcome Hallo ; do echo -en $i sleep 2 echo -en "\e[J" # laut meinem Script sollte dieser ANSI-Code # die aktuelle Zeile auf dem Bildschirm löschen done exit 0
Allerdings hat das nicht funktioniert, wie ich mir das vorgestellt hatte. Der besagte Befehl hatte meines Erachtens nach keine Wirkung gezeigt - auch keine anderweitige Wirkung.
Wo ist mein Fehler - oder wie kann man das lösen?
INFO:: Ich benutze zur Shell-Programmierung ein SUN Solaris 10 System.
Gruß und vorzeitig vielen Danke für die Antworten
starbuck
-
Hallo zusammen.
Ich vergnüge mich derweil mit der Implementation von:
Apache 2.2.4 + mod_jk 1.2.23 + Tomcat 6.0.13
Habe alles erfolgreich eingestellt und konfiguriert. Es sieht folgendermaßen aus:
Es existieren 2 reale Server (leider nur Scenic xL Rechner von vor einiger Zeit) worauf jeweils 1 Tomcat, 1 Apache und mod_jk in der oben genannten Version installiert ist. Die Weiterleitung von mod_jk an die AppServer erfolgt über Loadbalancing. Das Verfahren ist momentan noch irrelevant.
Viel wichtiger ist mir nun, eine Methode zu finden, mit einem Benchmarktool wie JMeter (Apache Foundation) eine Last auf den Konnektor auszuüben (Sessions, Anfragen erzeugen) und hinterher auszuwerten.
Das Ergebnis soll mir
a) Latenzzeit
Server, der die Anfrage bearbeitet hat (also welcher Tomcat-Server)
liefern.
Kann mir da jemand weiterhelfen?? Leider komme ich mit JMeter nicht so recht klar und die Ergebnisausgabe ist mir viel zu ungenau. Jetzt msuche ich nach anderen Lösungen. Die Zeit drängt. DeadLine ist Freitag Dienstschluss.
Vielen Dank schon mal im Vorraus!
gruss Thomas
PERL: Variable in Array-Name
in Skript- und Webserverprogrammierung
Geschrieben · Bearbeitet von starbuck86
Vic Deine Antwort war jetzt echt fürn A****, hat mich ehrlich gesagt 0 weitergebracht.
Natürlich soll mir das hier keiner debuggen, ich will ja selbst wissen was ich falsch gemacht habe. Das steht da nur alles um den Context zu haben.
Zum Thema Fehler eingrenzen.
Der Fehler liegt in dieser Routine. Wenn ich se_output auskommentiere läuft das Skript einwandfrei. Also ist es wohl dieser Bereich, der nicht so ganz will.
Hauptsächlich ging es mir um diese Fragestellung:
Ich werds jetzt mal über die String-Verbindung mit dem . probieren. Allerdings ist mir die GENAUE Syntax nicht so klar, deswegen frage ich ja hier nach. sh. Zitat.
Ich meine klar:
Aber es handelt sich hier ja um den Spezialfall, dass das $hallo, dann kein String ist, den ich einfach nur ausgeben will, sondern der Name eines Arrays.