script um in vorhandende Datei zu schreiben
script um in vorhandende Datei zu schreiben
Hallöle,
kann mir vorstellen das diese frage schon gestellt wurde, hab mit der suche aber auch nach ner halben stunde nich das richtige gefunden.
Also ich hab ein bash-script geschrieben mit dem ich ein Half-life server starte. Ausserdem hab ich Variablen ($1, $2 ...) eingefügt um beispielsweise bestimte maps/lvls mit einer bestimmten spieleranzahl zu starten.
Schön un gut klappt alles, fast schon zu einfach. (ich bin ein script-neuling, erst seit gestern )
Sooo jetzt gibt es aber Parameter die ich vorher in versch. conf datein festlegen muss.
Beispiel:
Um festzulegen wieviele CPU-Spieler/Bots in dem Spiel teilnehmen sollen, muss ich die datei bots.cfg öffnen un dort die anzahl der CPU-Spieler einzutragen.
Kann ich diesen vorgang auch scripten, sprich:
Script soll eine datei mit vi öffnen un dort einen bestimmten eintrag tätigen.
Oder falls dies nicht möglich ist, habe ich mir als notlösung überlegt, dass ich den inhalt der .cfg datei einfach in das script schreibe und dann kann ich ja variablen einsezten und das script soll dann diese datei erstellen und für die variablen werte einsezten.
Würde mich freuen wenn mir jmd. ein paar befehle auflistet mit denen ich das umsetzen könnte und ob das überhaupt möglich ist.
MfG
Tim Bleimehl
kann mir vorstellen das diese frage schon gestellt wurde, hab mit der suche aber auch nach ner halben stunde nich das richtige gefunden.
Also ich hab ein bash-script geschrieben mit dem ich ein Half-life server starte. Ausserdem hab ich Variablen ($1, $2 ...) eingefügt um beispielsweise bestimte maps/lvls mit einer bestimmten spieleranzahl zu starten.
Schön un gut klappt alles, fast schon zu einfach. (ich bin ein script-neuling, erst seit gestern )
Sooo jetzt gibt es aber Parameter die ich vorher in versch. conf datein festlegen muss.
Beispiel:
Um festzulegen wieviele CPU-Spieler/Bots in dem Spiel teilnehmen sollen, muss ich die datei bots.cfg öffnen un dort die anzahl der CPU-Spieler einzutragen.
Kann ich diesen vorgang auch scripten, sprich:
Script soll eine datei mit vi öffnen un dort einen bestimmten eintrag tätigen.
Oder falls dies nicht möglich ist, habe ich mir als notlösung überlegt, dass ich den inhalt der .cfg datei einfach in das script schreibe und dann kann ich ja variablen einsezten und das script soll dann diese datei erstellen und für die variablen werte einsezten.
Würde mich freuen wenn mir jmd. ein paar befehle auflistet mit denen ich das umsetzen könnte und ob das überhaupt möglich ist.
MfG
Tim Bleimehl
DU BIST DOCH KEIN PORTUGIESE!
Re: script um in vorhandende Datei zu schreiben
Hi,
Denn du mal ein Beispiel der Konfigdatei postest, und sagst was du gerne wie erstzen moechtest, dann ist dir zu helfen.
das muesste gehen, sogar ohne vitimb hat geschrieben: Sooo jetzt gibt es aber Parameter die ich vorher in versch. conf datein festlegen muss.
Beispiel:
Um festzulegen wieviele CPU-Spieler/Bots in dem Spiel teilnehmen sollen, muss ich die datei bots.cfg öffnen un dort die anzahl der CPU-Spieler einzutragen.
Kann ich diesen vorgang auch scripten, sprich:
Script soll eine datei mit vi öffnen un dort einen bestimmten eintrag tätigen.
Denn du mal ein Beispiel der Konfigdatei postest, und sagst was du gerne wie erstzen moechtest, dann ist dir zu helfen.
Roland
"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"
"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"
- meandtheshell
- Beiträge: 4054
- Registriert: 14.01.2005 17:51:30
Re: script um in vorhandende Datei zu schreiben
im startscript diesen eintrag machentimb hat geschrieben: Um festzulegen wieviele CPU-Spieler/Bots in dem Spiel teilnehmen sollen, muss ich die datei bots.cfg öffnen un dort die anzahl der CPU-Spieler einzutragen.
Code: Alles auswählen
echo "number_of_players_etc." >> /path/to/file/<name_of_configfile>
Code: Alles auswählen
markusgattol@pc1:~/misc$ var=2
markusgattol@pc1:~/misc$ echo "$var" >> test/file1
markusgattol@pc1:~/misc$ cat test/file1
2
markus
**EDITED*** 10.02.06 16:18
Ok danke für die schnelle hilfe hier ein ma ein bisserl code un erläuterungen:
Leider habe ich inzwischen raugefunden, dass es nicht möglich ist einfach eine Zahl/variable zu nutzen wie z.b.
was heißt ich muss ein script schreiben welches die datei einliest, auf Zeile 170 springt und dort Addbot einträgt, in die nächste Zeile springt und wieder addbot einträgt bis eine zählvariable abgelaufen is...also ne schleife..ok Diese zählvariable würde ich dann beim start des Server als Parameter mitgeben.
Ausserdem müsste ich dann ja bei einem neustart oder halt beenden des servers, die alten addbot-Commands wieder rauslöschen, dazu müsste der inprinzip alle "addbot"s in dem text suchen und deleten, müsste aber möglich sein, oder?
also ein paar tipps und befehle zum Thema Textbearbeitung per bashprogrammierung wärn nett.
Ok danke für die schnelle hilfe hier ein ma ein bisserl code un erläuterungen:
Code: Alles auswählen
.....170 Zeilen Bot-Konf.
#Hier folgt nun die stelle an der ich durch das einfügen von dem Befehl "addbot"
#genau ein Cpu-Spieler einfüge. In diesem falle wären es genau 3 Cpu-Spieler
addbot
addbot
addbot
# The line below binds the User Menu to the "=" key. Of course you
# can bind this to any key you like.
bind "ß" "podbotmenu"
Code: Alles auswählen
3*addbot
oder halt
variable*addbot
Ausserdem müsste ich dann ja bei einem neustart oder halt beenden des servers, die alten addbot-Commands wieder rauslöschen, dazu müsste der inprinzip alle "addbot"s in dem text suchen und deleten, müsste aber möglich sein, oder?
also ein paar tipps und befehle zum Thema Textbearbeitung per bashprogrammierung wärn nett.
Zuletzt geändert von timb am 10.02.2006 16:20:04, insgesamt 2-mal geändert.
DU BIST DOCH KEIN PORTUGIESE!
- meandtheshell
- Beiträge: 4054
- Registriert: 14.01.2005 17:51:30
@ hi timp
also gelesen hab ich den Text nicht - das kannst du keinem zumuten
Siehe meine Signatur: Code Tags, NoPaste
Info für dich:
http://www.linuxfibel.de/bash.htm
markus
also gelesen hab ich den Text nicht - das kannst du keinem zumuten
Siehe meine Signatur: Code Tags, NoPaste
Info für dich:
http://www.linuxfibel.de/bash.htm
markus
So dann fang ich ma an damit müsste es klappen hab ich von der Linuxfibel http://www.linuxfibel.de/bashprog.htm (ziemlich genau in der mitte der Seite unter "Dateien bearbeiten")
Wenn ich das richtig verstanden habe, werde ich eine copy der cfg-datei machen und an der Addbot-Stelle eine Variable hinsetzen, das script liest die copy-boz.cfg per readfile ein findet die variable und setzt statt dieser addbot ein und schreibt per writefile die original bot.cfg datei.
Muss ich nur zeimlich viele funktionen machen blabla aber naja, fast alles im leben is viel arbeit
Wäre nett wenn mich jmnd. darauf hinweißt wenn ich ganz auf dem falschen weg bin ?? dann erspar ich mir arbeit
MfG
Tim
Code: Alles auswählen
#!/bin/sh
# Laden der "Bibliotheksdatei"
. filehandling.sh
# Datei einlesen
readfile zu_bearbeitende_Datei FeldVariable Anzahl
# Inhalt bearbeiten
for ((i=0; i<$Anzahl; i++)); do
# Bearbeiten von FeldVariable[$i]...
done
# Datei schreiben
writefile FeldVariable Anzahl > zu_bearbeitende_Datei
Muss ich nur zeimlich viele funktionen machen blabla aber naja, fast alles im leben is viel arbeit
Wäre nett wenn mich jmnd. darauf hinweißt wenn ich ganz auf dem falschen weg bin ?? dann erspar ich mir arbeit
MfG
Tim
DU BIST DOCH KEIN PORTUGIESE!
Hi,
nur noch mal zu meinem Verstaendnis, der String "addbot" muss ab Zeile 170 und folgende, so oft vorkommen, wie Spieler teilnehmen sollen/wollen, oder?
Wenn dem so ist, wuerde ich zuerst alle Zeilen die ausschliesslich "addbot" enthalten loeschen, um anschliessend die gewuenschte Anzahl einzufügen.
Dazu gibt es tausende Moeglichkeiten das zu machen, meine musst du also nicht als Referenz ansehen, wahrscheinlich sind auch die meisten besser eleganter oder was auch immer.
Auf jeden Fall solltest du eine Sicherheitskopie der Konfigurationsdatei anlegen!
So, das ist jetzt UNGETESTET, sollte aber klappen. Du musst in der zweiten Zeile die Konfigurationsdatei eintragen, und das Script mit der Anzahl der Spieler als Parameter aufrufen. Vorher musst du's natuerlich ausfuehrbar machen (chmod 700 DATEI).
Wenn noch was unklar ist, einfach fragen.
nur noch mal zu meinem Verstaendnis, der String "addbot" muss ab Zeile 170 und folgende, so oft vorkommen, wie Spieler teilnehmen sollen/wollen, oder?
Wenn dem so ist, wuerde ich zuerst alle Zeilen die ausschliesslich "addbot" enthalten loeschen, um anschliessend die gewuenschte Anzahl einzufügen.
Dazu gibt es tausende Moeglichkeiten das zu machen, meine musst du also nicht als Referenz ansehen, wahrscheinlich sind auch die meisten besser eleganter oder was auch immer.
Auf jeden Fall solltest du eine Sicherheitskopie der Konfigurationsdatei anlegen!
Code: Alles auswählen
#!/bin/bash
konf_file="hier den Dateinamen mit Pfad einsatzen"
#Pruefern ob eine Anzahl der Spieler >0 uebergeben wurde
if [ "$1" -gt 0 ]
then
anzahl=$1
else
echo "Usage: $0 Anzahl_der_Spieler"
exit 1
fi
# der nachfolgende sed Aufruf liest die Konfigurationsdatei ein,
# schmeisst Zeilen die Ausschliesslich addbot enthalten weg,
# und schreibt das Ergebnis nach konf_file.tmp
sed -e '/^addbot$'/d' <$konf_file >$konf_file.tmp
#Konfigfile loeschen, da wir ja jetzt die .tmp Datei haben, und dann leer anlegen
rm $konf_file.tmp
touch $konf_file
#Hilfsvariablen
z_zaehler=0 #Zeilenzaehler
tmp_anz=1 #Variable die ich hochzaehle bis zur anzahl der Spieler
#Einlesen der Konfiguration
while read zeile
do
let z_zaehler=$z_zaehler+1
#sind wir schon in Zeile 170?
if [ "$z_zaehler" -eq 170 ]
then
#ja
echo $zeile>>$konf_file
#jetzt so oft addbot ausgeben wie dem Script übergeben wurde
while [ "$tmp_anz" -le "$anzahl" ]
do
echo "addbot" >>$konf_file
let tmp_anz=$tmp_anz+1
done
else
#nein, Zeilen einfach so "rausschreiben"
echo $zeile >>$konf_file
fi
done <$konf_file.tmp
Wenn noch was unklar ist, einfach fragen.
Roland
"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"
"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"
wau
so genau wollt ichs gar net wissen...ne spass
WAU ... danke für den aufwand *yousavedmyday*
sieht für mich auf den ersten blick plausibel aus kann ich meine kümmerlichen versuche in die tonne hauen
ich geh jetzt ersma feiern deshalb kann ich dat net mehr testen
werde aber direkt morgen früh meinen verkarterten Körper vor den rechner schwingen un dat austesten
nochmals vielen dank für die arbeit
Schönen Freitag Abend wünscht der Tim
WAU ... danke für den aufwand *yousavedmyday*
sieht für mich auf den ersten blick plausibel aus kann ich meine kümmerlichen versuche in die tonne hauen
ich geh jetzt ersma feiern deshalb kann ich dat net mehr testen
werde aber direkt morgen früh meinen verkarterten Körper vor den rechner schwingen un dat austesten
nochmals vielen dank für die arbeit
Schönen Freitag Abend wünscht der Tim
DU BIST DOCH KEIN PORTUGIESE!
Moin,
kein Thema, das mit dem Script. Wenn was nicht funktioniert, nicht klar ist, ... frag ruhig.
Ich habe auch oft genug Probleme und bin froh wenn mir einer hilft, nur muss man dafuer halt selber bereit sein zu helfen. Weil ich gestern Zeit hatte, habe ich mich dann mal dran gesetzt.
Einem dann ein nacktes, wahrscheinlich nicht boes gemeintes, RTFM an den Kopf zu schmeissen halte ich fuer sinnlos, damit ist keinem geholfen, und die Laune wird auch bei keinem Besser . Entweder man gibt konkrete Tips, Code, oder Link's (zum Manual), oder man spart sich den Spruch.
kein Thema, das mit dem Script. Wenn was nicht funktioniert, nicht klar ist, ... frag ruhig.
Ich habe auch oft genug Probleme und bin froh wenn mir einer hilft, nur muss man dafuer halt selber bereit sein zu helfen. Weil ich gestern Zeit hatte, habe ich mich dann mal dran gesetzt.
Einem dann ein nacktes, wahrscheinlich nicht boes gemeintes, RTFM an den Kopf zu schmeissen halte ich fuer sinnlos, damit ist keinem geholfen, und die Laune wird auch bei keinem Besser . Entweder man gibt konkrete Tips, Code, oder Link's (zum Manual), oder man spart sich den Spruch.
Roland
"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"
"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"
-
- Beiträge: 2186
- Registriert: 18.09.2005 15:52:02
- Lizenz eigener Beiträge: GNU Free Documentation License
-
Kontaktdaten:
roli hat geschrieben:Einem dann ein nacktes, wahrscheinlich nicht boes gemeintes, RTFM an den Kopf zu schmeissen halte ich fuer sinnlos, damit ist keinem geholfen, und die Laune wird auch bei keinem Besser . Entweder man gibt konkrete Tips, Code, oder Link's (zum Manual), oder man spart sich den Spruch.
jhrDebianforum.de - Verhaltensregeln hat geschrieben:3.2. Angriff ist nicht immer die beste Verteidigung
Wenn jemandem die Fragestellung in einem Beitrag oder generell die Art und Weise wie andere schreiben nicht passt oder man keinerlei Information zur Lösung des Problems beitragen kann, so sollte man sich von diesen Themen am Besten fernhalten.
Desktop: Intel Core2Quad Q8300 2.5GHz, 256GB SSD + 1 TB HDD, 8 GB RAM, Debian Sid, Kernel 3.13
also, irgendwie hab ich es nicht hinbekommen, es hat zwar fast geklappt aber ich bin aus der schleife net mehr rausgekommen, d.h. er hat nach dem er addbot unten hingeschrieben, wieder angefangen unter addbot die ganze cfg. datei nochmal einzulesen un kamm innne endlosschleife. hab dann hier un da mal rummodifiziert un es kamm nie ein zufriedenstellndes ergebnis raus.
jetzt bin ich ganz feige auf heimatterrain abgehaun un habs in c++ geschrieben
so un um das progrämche nun in ein simples shell script gepackt.
so nun kann ich den gameserver starten:
namedesscripts $1(maximale spieler anzahl) $2(name der zu spielenden karte) $3(anzahl der computergegner) $4(für welches team sollen die cpu-spieler kämpfen)
also beispiel:
hl 16 de_dust 5 2
karte de_dust 16, spieler dürfen teilnehmen, 5 cpu-spieler werden mitmachen die in das 2. team gehen.
Was hab ich daraus gelernt...ich mag die syntax von der bash net
Trotzdem dank an alle, vorrallem an roli
MfG
Tim
jetzt bin ich ganz feige auf heimatterrain abgehaun un habs in c++ geschrieben
Code: Alles auswählen
#include <stdio.h>
int main(int argc, char*argv[])
{
#deklarierung der Variablen
char *path="/usr/local/halflife/hlds_l/cstrike/addons/podbot/copypodbot.cfg";
FILE *fp;
int team, bots, i;
#Prüfe anzahl der übergebenen Parameter
if (argc<3)
{
printf("falsche parameter anzahl \n");
exit(0);
}
#einlesen der Parameter
sscanf(argv[1], "%d", &bots);
sscanf(argv[2], "%d", &team);
printf("%d %d \n" ,bots,team);
#öffnen der datei und mit a+ sagen: ans ende der datei schreiben
fp=fopen (path, "a+");
#addbot an die datei anhängen, so oft wie parameter "bots" groß ist
for (i=0; i<bots; i++)
fprintf(fp, "addbot 101 5 %d 5 \n",team);
fclose(fp);
return 0;
}
Code: Alles auswählen
#!/bin/bash
cd /usr/local/halflife/hlds_l/
cp ./cstrike/addons/podbot/copypodbot.cfg ./cstrike/addons/podbot/podbot.cfg
hlmod $3 $4
./hlds_run -game cstrike -insecure -nomaster +sv_lan 1 +maxplayers $1 +map $2
namedesscripts $1(maximale spieler anzahl) $2(name der zu spielenden karte) $3(anzahl der computergegner) $4(für welches team sollen die cpu-spieler kämpfen)
also beispiel:
hl 16 de_dust 5 2
karte de_dust 16, spieler dürfen teilnehmen, 5 cpu-spieler werden mitmachen die in das 2. team gehen.
Was hab ich daraus gelernt...ich mag die syntax von der bash net
Trotzdem dank an alle, vorrallem an roli
MfG
Tim
DU BIST DOCH KEIN PORTUGIESE!
Hi Tim,
so schnell geb ich jetzt auch nicht auf, mach's mal was genauer.
so schnell geb ich jetzt auch nicht auf, mach's mal was genauer.
Hat das Script addbot so oft eingetragen wie es sollte, und dann wieder in Zeile 1 der Konfiguration angefangen, oder wie muss ich das verstehen?timb hat geschrieben: aber ich bin aus der schleife net mehr rausgekommen, d.h. er hat nach dem er addbot unten hingeschrieben, wieder angefangen unter addbot die ganze cfg. datei nochmal einzulesen un kamm innne endlosschleife.
Roland
"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"
"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"