Zum Inhalt springen

starbuck86

Mitglieder
  • Gesamte Inhalte

    39
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von starbuck86

  1. 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: $a="Hal"; $b="lo"; $hallo=$a.$b; 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.
  2. 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.
  3. 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
  4. 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 :-)
  5. 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
  6. 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.
  7. 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: 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
  8. 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
  9. starbuck86

    Shell-Scripting

    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
  10. starbuck86

    Shell-Scripting

    Clear löscht den ganzen Bildschirm. Ich will nur 1 Zeile löschen/ersetzen.
  11. starbuck86

    Shell-Scripting

    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ß
  12. 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

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...