Einen wunderschönen guten Morgen! Ich möchte in einem bash-Script den Inhalt einer Variablen in den Inhalt einer anderen schreiben und krieg's nicht auf die Reihe. Ich übergebe dem Script beim Aufruf 4 Parameter, der 2. und 3. soll, wenn er auf "0" steht, selber vom Skript generiert werden. (akt. Datum). So, nun habe ich im Script folgendes: ,----- | #!/bin/bash | akt_monat=`date | awk '{ print $2 }'`; | echo $akt_monat `----- gibt dann auch korrekt "Apr" aus. Jetzt was ich eigentlich will: ,----- | #!/bin/bash | akt_monat=`date | awk '{ print $2 }'`; | $2 = $akt_monat; `----- Geht natürlich nicht, weil dann im Script steht 0 = Apr Hmmm. Nur wie kriege ich jetzt das Ergebnis $akt_monat (also Apr) in die Variable $2 übergeben? Sicherlich wieder nur 'ne Kleinigkeit, aber sowas wird in meinem Buch mal wieder gemacht. Habe übrigens das Buch "Jetzt lerne ich Shell-Programmierung" vom MuT-Verlag. Gibt's da noch was besseres? Michi
** "Michael Jakscht"
Einen wunderschönen guten Morgen!
Ich möchte in einem bash-Script den Inhalt einer Variablen in den Inhalt einer anderen schreiben und krieg's nicht auf die Reihe.
Ich übergebe dem Script beim Aufruf 4 Parameter, der 2. und 3. soll, wenn er auf "0" steht, selber vom Skript generiert werden. (akt. Datum).
So, nun habe ich im Script folgendes:
,----- | #!/bin/bash | akt_monat=`date | awk '{ print $2 }'`; | echo $akt_monat `-----
gibt dann auch korrekt "Apr" aus. Jetzt was ich eigentlich will:
,----- | #!/bin/bash | akt_monat=`date | awk '{ print $2 }'`; | $2 = $akt_monat; `-----
Geht natürlich nicht, weil dann im Script steht 0 = Apr
Hmmm. Nur wie kriege ich jetzt das Ergebnis $akt_monat (also Apr) in die Variable $2 übergeben?
Sicherlich wieder nur 'ne Kleinigkeit, aber sowas wird in meinem Buch mal wieder gemacht. Habe übrigens das Buch "Jetzt lerne ich Shell-Programmierung" vom MuT-Verlag. Gibt's da noch was besseres?
Michi
Hi, bezweifle, daß das geht. $2 ist doch eine Argumentvariable (das zweite Argument Deines Shell-Aufrufs) Warum willst Du die mit einem neuen Wert belegen? Der (bei anderen Variablen) korrekte Aufruf wäre ja 2="neuer Inhalt" und nicht $2="neuer Inhalt" das mag meine bash natürlich nicht... Kann mir auch nicht vorstellen, daß es dafür keinen Workaround geben soll... may the tux be with You -- Joerg Thuemmler, Systembetreuer sysadmin@vordruckleitverlag.de Vordruck Leitverlag GmbH Berlin, ZNL Freiberg Halsbruecker Str. 31b, 09599 Freiberg, Germany +49 (0)3731 303-121 Fax -114
Hallo, On Fri, 12 Apr 2002, Joerg Thuemmler wrote:
Der (bei anderen Variablen) korrekte Aufruf wäre ja
2="neuer Inhalt"
und nicht
$2="neuer Inhalt"
das mag meine bash natürlich nicht... Kann mir auch nicht vorstellen, daß es dafür keinen Workaround geben soll...
Gibt's, natuerlich, und ist ggfs. auch angebracht, aber fast immer uberfluessig ;) -dhn PS: help set! -- RFC 882 put the dot in .com.
Hallo, On Fri, 12 Apr 2002, Michael Jakscht wrote:
Einen wunderschönen guten Morgen!
Ebenfalls.
Ich möchte in einem bash-Script den Inhalt einer Variablen in den Inhalt einer anderen schreiben und krieg's nicht auf die Reihe.
Ich übergebe dem Script beim Aufruf 4 Parameter, der 2. und 3. soll, wenn er auf "0" steht, selber vom Skript generiert werden. (akt. Datum).
So, nun habe ich im Script folgendes:
,----- | #!/bin/bash | akt_monat=`date | awk '{ print $2 }'`; | echo $akt_monat `-----
Du willst 'man date' lesen!!! (date --help sollte aber schon reichen!) akt_monat=`date "+%b"`
gibt dann auch korrekt "Apr" aus. Jetzt was ich eigentlich will:
,----- | #!/bin/bash | akt_monat=`date | awk '{ print $2 }'`; | $2 = $akt_monat; `-----
Geht natürlich nicht, weil dann im Script steht 0 = Apr
Hmmm. Nur wie kriege ich jetzt das Ergebnis $akt_monat (also Apr) in die Variable $2 übergeben?
Garnicht (eigentlich). Die $0 .. $9 Variablen sind "read-only". Falls es wirklich $2 sein _MUSS_, dann hilft nur 'set': set -- $0 $1 $akt_monat $3 $4 ... Besser waere es aber, wenn du ggfs. noetige Variablen vorher aus $@ rauspulst... Oder das ganze von vornherein anders auf- ziehst... Was vermutlich die bessere Loesung waere...
Sicherlich wieder nur 'ne Kleinigkeit, aber sowas wird in meinem Buch mal wieder gemacht.
Au ja, verrat doch bei der Gelegenheit auch gleich, was du eigentlich machen willst... Ich bin mir sicher, da gibt's ne bessere Loesung ;))
Habe übrigens das Buch "Jetzt lerne ich Shell-Programmierung" vom MuT-Verlag. Gibt's da noch was besseres?
man bash, was sonst? -dnh -- Alle wollen alles haben, und bekommen nur das was sie kriegen. [WoKo in dag°]
David Haller
On Fri, 12 Apr 2002, Michael Jakscht wrote:
Habe übrigens das Buch "Jetzt lerne ich Shell-Programmierung" vom MuT-Verlag. Gibt's da noch was besseres?
man bash, was sonst?
www.linuxdoc.org - Wer Linux einsetzt, sollte sich vielleicht auch die Dokumentation vom Linux Documentation Project ansehen. Und wenn es um das Scripting mit Bash gibt, dann gibt es da eine schöne Guide: Advanced Bash Scripting Guide. Aber - wie sollte es auch anders sein - findet sich dort extrem viel an Informationen. - Guides (Netzwerk, Systemadministration, ....) - HowTos - FAQs - ... (BTW: Ich glaube, icn baue in open-webmail noch eine Erweiterung ein, in die ich Standard-Antworten einbauen kann. Dann gibt es Verweise auf linuxdoc, google und manch andere Sache automatisch. Oder - da diese Antworten ständig passen (mindestens auf 4 Postings/Tag), schreibe ich einen Cron-Job, der alle 6 Stunden eine entsprechende Mail an die Liste schreibt :) ... Obwohl ... Wer frisch subscribet bekommt diese nicht ... also vielleicht doch alle 5 min? Aber dazu einen Cron-Job? Dann doch lieber ein Script, welches ständig solche eMails schreibt *lol* Mit den besten Grüßen, Konrad Neitzel -- SoftMediaTec GmbH Tel: 0172 / 689 31 45 Fax: 069 / 90 50 99 53
Hi ;-)) David Haller [mailto:david@dhaller.de] schrieb am Friday, April 12, 2002 10:00 AM:
Du willst 'man date' lesen!!! (date --help sollte aber schon reichen!)
Jaja, ich weiss ja ;-)) Aber nenn' es halt so: Ich steh' auf grep, awk und sed ;-)) Und das ist denke ich schneller einzutippen, als erst mal zu überlegen, manpages lesen, vielleicht sogar das richtige zu finden und sich dann deswegen mit anderen Problemen rumschlagen zu müssen. Auch wenn's nicht die schönste, sauberste Lösung ist... ;-))
akt_monat=`date "+%b"`
Na, dann werde ich wahrscheinlich auch die Variante mal ausprobieren ;-)) Danke für den Tip! ;-)
Garnicht (eigentlich). Die $0 .. $9 Variablen sind "read-only". Falls es wirklich $2 sein _MUSS_, dann hilft nur 'set': set -- $0 $1 $akt_monat $3 $4 ...
Autsch, sieht aber böse aus ;-))
Besser waere es aber, wenn du ggfs. noetige Variablen vorher aus $@ rauspulst... Oder das ganze von vornherein anders auf- ziehst... Was vermutlich die bessere Loesung waere...
Yep, das werde ich dann auch.
Sicherlich wieder nur 'ne Kleinigkeit, aber sowas wird in meinem Buch mal wieder gemacht.
Sollte eigentlich heissen "... wird in meinem Buch mal wieder NICHT behanden..." Ich bin nicht so einer der alle Beispiele aus einem Buch durchgeht, neeeeiiin ;-))))
Au ja, verrat doch bei der Gelegenheit auch gleich, was du eigentlich machen willst... Ich bin mir sicher, da gibt's ne bessere Loesung ;))
Die gibt es, und zwar schon lange ;-))) *g* Die Lösung nennt sich logsurfer, und ich habe es noch *nie* ausprobiert ;-))) Ich möchte halt durch Dateien scannen (meistens die allmessages) und zum mir von einem bestimmten Tag (wenn per cron aufgerufen vom akt. Tag) mir alles rausziehen lassen, was mit z.B. sshd zutun hat. Dann zähle ich noch schnell die Zeilen und weiss dann, wieviele Login- Versuche es gegeben hat. Oder ich greppe die DropLog's von iptables. Dann weiss ich wie viele Pakete verworfen wurden (oder wieviele Angriffe gestartet wurden). Ist alles nur ein Beispiel, aber ich denke vom Sinn her kann man jetzt verstehen, was ich machen will. Die Ergebnisse will ich dann per Mail verschicken. Warum ich dann nicht den logsurfer nehme? Ich weiss nicht, ich denke, der macht das gleiche in besserer Art, oder??? Ausserdem will ich *lernen*, und das geht halt nur wenn man sich selber ranmacht und "auf die schnauze fällt". Einverstanden?? ;-))
man bash, was sonst?
Alles schon gemacht... Aber sooo viel will ich nicht am Schirm lesen. Das werd' ich mal ausdrucken im laufe des Tages... ;-))
Alle wollen alles haben, und bekommen nur das was sie kriegen.
Der Spruch ist gut ;-)) Der gefällt mir ;-)) BTW, wo wir gerade beim Thema sind: Wieso, wenn ich als Parameter $2 und $3 "auto" (ohne "") übergebe, kann ich nicht if [ "$2" -eq "auto" ] machen? Wieso wird ein integer erwartet?? ein "$2" = "auto" oder "$2" == "auto" geht auch nicht, immer wird ein integer erwartet?? Jaja, ich weiss, man bash ;-)) Vielleicht geht's hierüber aber schneller ;-)) ?? Michi
Hey ;-) Michael Jakscht [mailto:michael@jakscht.de] schrieb am Friday, April 12, 2002 10:48 AM:
BTW, wo wir gerade beim Thema sind: Wieso, wenn ich als Parameter $2 und $3 "auto" (ohne "") übergebe, kann ich nicht if [ "$2" -eq "auto" ] machen? Wieso wird ein integer erwartet?? ein "$2" = "auto" oder "$2" == "auto" geht auch nicht, immer wird ein integer erwartet?? Jaja, ich weiss, man bash ;-)) Vielleicht geht's hierüber aber schneller ;-)) ??
Genau vor dem Problem stehe ich jetzt: Wie kann ich z.B. mit einer if-Abfrage einen String vergleichen? z.B. if [ "$5" <istgleichdemstring> "programm" ] ; then .... fi Geht das überhaupt? Wie kann ich so etwas tun? Michael
On 12 Apr 2002 at 12:47, Michael Jakscht wrote:
Hey ;-)
[...]
Genau vor dem Problem stehe ich jetzt: Wie kann ich z.B. mit einer if-Abfrage einen String vergleichen?
z.B.
if [ "$5" <istgleichdemstring> "programm" ] ; then .... fi
Geht das überhaupt? Wie kann ich so etwas tun?
Und wieder: man bash Bei mir geht: t="Dies ist ein Test" if [ "$t" = "Dies ist kein Test" ]; then echo ja else echo nein fi und gibt korrekt "nein" aus. Wo ist das Problem? Andreas
Hi, Andreas Kyek [mailto:andreas.kyek@vodafone.de] schrieb am Friday, April 12, 2002 1:13 PM:
Bei mir geht: t="Dies ist ein Test" if [ "$t" = "Dies ist kein Test" ]; then echo ja else echo nein fi und gibt korrekt "nein" aus. Wo ist das Problem?
Wüsste ich auch gern. Jetzt geht's nämlich auch bei mir. Keine Ahnung warum, aber jetzt gehts. Muss mich wohl dauernd vertippt haben. Komisch... Michi
Am Fre, 2002-04-12 um 12.47 schrieb Michael Jakscht:
Hey ;-)
Michael Jakscht [mailto:michael@jakscht.de] schrieb am Friday, April 12, 2002 10:48 AM:
BTW, wo wir gerade beim Thema sind: Wieso, wenn ich als Parameter $2 und $3 "auto" (ohne "") übergebe, kann ich nicht if [ "$2" -eq "auto" ] machen? Wieso wird ein integer erwartet?? ein "$2" = "auto" oder "$2" == "auto" geht auch nicht, immer wird ein integer erwartet?? Jaja, ich weiss, man bash ;-)) Vielleicht geht's hierüber aber schneller ;-)) ??
Genau vor dem Problem stehe ich jetzt: Wie kann ich z.B. mit einer if-Abfrage einen String vergleichen?
z.B.
if [ "$5" <istgleichdemstring> "programm" ] ; then .... fi
Geht das überhaupt?
man test
Wie kann ich so etwas tun? if test "$5"x = "programm"x; then .. fi
Ralf
Hallo, On Fri, 12 Apr 2002, Michael Jakscht wrote: [war das Cc Absicht?]
David Haller [mailto:david@dhaller.de] schrieb am Friday, April 12, 2002 10:00 AM:
Du willst 'man date' lesen!!! (date --help sollte aber schon reichen!)
Jaja, ich weiss ja ;-))
*g*
Ich möchte halt durch Dateien scannen (meistens die allmessages) und zum mir von einem bestimmten Tag (wenn per cron aufgerufen vom akt. Tag) mir alles rausziehen lassen, was mit z.B. sshd zutun hat.
Da sollte (e)grep dein Freund sein... egrep "^`date +%b`[^:]*sshd\[[0-9]*\]:"
Dann zähle ich noch schnell die Zeilen und weiss dann, wieviele Login- Versuche es gegeben hat.
Auch das: splitte die egrep-Ausgabe mittels 'tee' und pipe den einen Strom nach 'wc -l' ;) Um dann nur best. "Felder" anzuzeigen boete es sich an, den anderen "Strom" mit awk zu verwursen ;)
Die Ergebnisse will ich dann per Mail verschicken.
Beide Stroeme wieder "vereinigen" und in 'mail' reinpipen ;)
Warum ich dann nicht den logsurfer nehme?
Warum? ;*)
Ausserdem will ich *lernen*, und das geht halt nur wenn man sich selber ranmacht und "auf die schnauze fällt".
Einverstanden?? ;-))
Voll und ganz!
man bash, was sonst?
Alles schon gemacht... Aber sooo viel will ich nicht am Schirm lesen. Das werd' ich mal ausdrucken im laufe des Tages... ;-))
*g*
BTW, wo wir gerade beim Thema sind: Wieso, wenn ich als Parameter $2 und $3 "auto" (ohne "") übergebe, kann ich nicht if [ "$2" -eq "auto" ] machen? Wieso wird ein integer erwartet?? ein "$2" = "auto" oder "$2" == "auto" geht auch nicht, immer wird ein integer erwartet?? Jaja, ich weiss, man bash ;-))
Genau. Siehe 'help test' und/oder 'man test'. test "string" = "string" test integer -eq integer d.h.: du suchst nach: 'test "$2" = "auto"', besser aber, wie schon von Ralf angeregt: 'test "x$2" = "xauto"'. -dnh -- Die Tiere dürfen pinkeln und kacken wo sie wollen. Und wir Menschen müssen dafür extra aufŽs Klo gehen. [WoKo in dag°]
participants (6)
-
Andreas Kyek
-
David Haller
-
Joerg Thuemmler
-
Konrad Neitzel
-
Michael Jakscht
-
Ralf Corsepius