Bashscript / Wrapperscript
Bashscript / Wrapperscript
Moin Deb Com,
hab mittlerweile meinen Server gesichert und mich mal nen bisschen in die Materie eingelesen.
Wollte mal fragen wo/wie man ein script findet/schreibt welches configurationen von z.B. einem Minecraft Server überschreibt. Ich habe ein simples webinterface bekommen inwelchem man die config.cfg datei aufrufen kann, habe 2 Minecraft Server an "freunde" für nen paar euro vermietet. Das problem an der sache ist das sie problemlos die Slotzahl abändern können. Habe mich mal umgehört und mir wurde gesagt das ich ein script schreiben soll oder suchen muss welches sich Wrapperscript nennt, welches dann die config in den punkten überschreibt welche ich einstelle. Sodass sie die slotzahl ändern können aber nach dem speichern button ersteinmal das script drüber läuft und alles was mir nicht passt zurück ändert.
Würde mich freuen wenn ihr mir weiterhelfen könnt.
MFG Phil
hab mittlerweile meinen Server gesichert und mich mal nen bisschen in die Materie eingelesen.
Wollte mal fragen wo/wie man ein script findet/schreibt welches configurationen von z.B. einem Minecraft Server überschreibt. Ich habe ein simples webinterface bekommen inwelchem man die config.cfg datei aufrufen kann, habe 2 Minecraft Server an "freunde" für nen paar euro vermietet. Das problem an der sache ist das sie problemlos die Slotzahl abändern können. Habe mich mal umgehört und mir wurde gesagt das ich ein script schreiben soll oder suchen muss welches sich Wrapperscript nennt, welches dann die config in den punkten überschreibt welche ich einstelle. Sodass sie die slotzahl ändern können aber nach dem speichern button ersteinmal das script drüber läuft und alles was mir nicht passt zurück ändert.
Würde mich freuen wenn ihr mir weiterhelfen könnt.
MFG Phil
Problems on Windows? re-boot
Problems on Linux? be root
Problems on Linux? be root
- MustrumRidcully
- Beiträge: 124
- Registriert: 16.06.2005 04:11:24
- Lizenz eigener Beiträge: GNU General Public License
- Wohnort: berlin
Re: Bashscript / Wrapperscript
da wirst du jetzt vermutlich antworten von zwei eingeschworenen schulen kriegen, nämlich von der sed- und der bash-fraktion. wie das im einzelnen aussieht, hängt natürlich davon ab, wie die config-datei aussieht: ist es eine xml-datei, eine name=wert liste oder stehen gar nur die werte darin, aber in einer bestimmten reihenfolge?
Volk ist Opium für eine Religion.
Re: Bashscript / Wrapperscript
die datei heißt an sich "server.properties"
der inhalt sieht wiefolgt aus
denke eher das das mit awk gehen sollte da ich bei sed nicht weiß ob es Zeilen ersetzen kann wo man nur halbe angaben machen kann, wie zb.
Möchte die Playeranzahl im bash-script definieren und sagen das es 20 player gibt.
demnach müsste ich ja dem script sagen "max-players=" ersetzen zu "max-players=20". Geht das mit sed so einfach?
Wenn ja sende mir mal bitte ein beispielt welches nur die Playerzahl übersetzt.
der inhalt sieht wiefolgt aus
Code: Alles auswählen
#Minecraft server properties
#Thu Jul 21 22:17:35 CEST 2011
level-name=world
allow-nether=true
view-distance=10
spawn-monsters=true
online-mode=true
spawn-animals=true
max-players=20
server-ip=
pvp=true
level-seed=
server-port=25565
allow-flight=false
white-list=false
Möchte die Playeranzahl im bash-script definieren und sagen das es 20 player gibt.
demnach müsste ich ja dem script sagen "max-players=" ersetzen zu "max-players=20". Geht das mit sed so einfach?
Wenn ja sende mir mal bitte ein beispielt welches nur die Playerzahl übersetzt.
Problems on Windows? re-boot
Problems on Linux? be root
Problems on Linux? be root
- MustrumRidcully
- Beiträge: 124
- Registriert: 16.06.2005 04:11:24
- Lizenz eigener Beiträge: GNU General Public License
- Wohnort: berlin
Re: Bashscript / Wrapperscript
hmm... nu haste mich eiskalt erwischt, ich bin nämlich aus der bash-fraktion.
aber grundsätzlich ist sed ein hervorragendes tool dafür, wie du an dieser knappen anleitung sehen kannst: http://www.grymoire.com/Unix/Sed.html
aber nun mal im ernst:
aber grundsätzlich ist sed ein hervorragendes tool dafür, wie du an dieser knappen anleitung sehen kannst: http://www.grymoire.com/Unix/Sed.html
aber nun mal im ernst:
Code: Alles auswählen
cp server.properties server.properties.bak
sed s/max-players=.*/max-players=20/ <server.properties >server.properties.new
Volk ist Opium für eine Religion.
Re: Bashscript / Wrapperscript
Hab das jetzt mal aufn Server geschmissen, nur was muss ich nun ändern damit die ausgegebene datei normal server.properties heißt ?
PS: Wenn ich mir das jetzt angucke das das nur so nen lächerlicher Stern war den ich nicht kannte, könnte ich mir selbst wehtun^^
PS: Wenn ich mir das jetzt angucke das das nur so nen lächerlicher Stern war den ich nicht kannte, könnte ich mir selbst wehtun^^
Problems on Windows? re-boot
Problems on Linux? be root
Problems on Linux? be root
- MustrumRidcully
- Beiträge: 124
- Registriert: 16.06.2005 04:11:24
- Lizenz eigener Beiträge: GNU General Public License
- Wohnort: berlin
Re: Bashscript / Wrapperscript
einfach umbenennen:
zur sicherheit haste ja noch das alte original in der backup.
Code: Alles auswählen
mv server.properties.new server.properties
Volk ist Opium für eine Religion.
Re: Bashscript / Wrapperscript
Kann man nicht einfach definieren das er kein backup erstellt, weil ich denke mal das nenn nutzer nicht daran interressiert ist die alten Daten im ordner liegen zu haben
Was muss ans ender der Zeile, da ich ja mehrere Parameter überschreiben möchte aber wenn ich einfach nur Zeile nach Zeile schreiben möchte ändert der nur das letzte Parameter?
Mit einem simplen ; am Ende der Zeile ist es ja nicht getan
Was muss ans ender der Zeile, da ich ja mehrere Parameter überschreiben möchte aber wenn ich einfach nur Zeile nach Zeile schreiben möchte ändert der nur das letzte Parameter?
Mit einem simplen ; am Ende der Zeile ist es ja nicht getan
Zuletzt geändert von Nagazi am 22.07.2011 12:38:08, insgesamt 1-mal geändert.
Problems on Windows? re-boot
Problems on Linux? be root
Problems on Linux? be root
- MustrumRidcully
- Beiträge: 124
- Registriert: 16.06.2005 04:11:24
- Lizenz eigener Beiträge: GNU General Public License
- Wohnort: berlin
Re: Bashscript / Wrapperscript
klar, lass einfach die cp... zeile weg.
Volk ist Opium für eine Religion.
Re: Bashscript / Wrapperscript
Jo, wie ich oben ja grade nochmal nacheditiert hatte die frage,
was mach ich am Zeilenende wenn ich mehrere Parameter überschreiben möchte ?
was mach ich am Zeilenende wenn ich mehrere Parameter überschreiben möchte ?
Problems on Windows? re-boot
Problems on Linux? be root
Problems on Linux? be root
-
- Beiträge: 1213
- Registriert: 09.11.2007 13:25:57
- Lizenz eigener Beiträge: GNU General Public License
-
Kontaktdaten:
Re: Bashscript / Wrapperscript
Hallo,
mehrere Substitutionen in eine Datei packen:
Dann geht unter Debian auch so etwas:
Mit einem sed als She-Bang sollte es auch funktionieren, aber dann bekomme ich das --in-place nicht hin :-/
MfG i
mehrere Substitutionen in eine Datei packen:
Code: Alles auswählen
# reset.sed-Datei
s/$max-players=.*/max-players=20/
s/$spawn-monsters=.*/spawn-monsters=true/
Code: Alles auswählen
sed -i -f reset.sed server.properties
MfG i
Re: Bashscript / Wrapperscript
Okay, hab jetzt diene sed datei genommen und so umgearbeitet das sie auf meine beschreibung passt
das führe ich dann mit deinem startparameter
aus und mein shell fenster macht es auch. Nur wenn ich dann die properties manuell öffne, hat sich nichts geändert -.-
Code: Alles auswählen
s/$max-players=.*/max-players=20/
s/$server-ip=.*/server-ip=127.0.0.0/
s/$server-port=.*/server-port=25565/
Code: Alles auswählen
sed -i -f reset.sed server.properties
Problems on Windows? re-boot
Problems on Linux? be root
Problems on Linux? be root
- MustrumRidcully
- Beiträge: 124
- Registriert: 16.06.2005 04:11:24
- Lizenz eigener Beiträge: GNU General Public License
- Wohnort: berlin
Re: Bashscript / Wrapperscript
du musst sed sagen, woher er die dinger nehmen und wohin er sie schreiben soll:
mit dem < sagst du sed, dass er aus server.properties lesen soll, mit dem > sagst du ihm, dass er das ergebnis in server.properties.new schreiben soll. anschließend wuppst du mit mv die neue datei zur alten.
< und > werden dir immer wieder begegnen auf der shell. < öffnet ein file zum lesen, > zum schreiben. >> hängt an.
z.b.
Code: Alles auswählen
sed -i -f reset.sed <server.properties >server.properties.new
mv server.properties.new server.properties
< und > werden dir immer wieder begegnen auf der shell. < öffnet ein file zum lesen, > zum schreiben. >> hängt an.
z.b.
Code: Alles auswählen
echo "bla"
# ergebnis:
bla
echo "bla" >bla.txt
# ergebnis: nix. AABER:
cat bla.txt
# ergebnis:
bla
echo "bla" >>bla.txt
cat bla.txt
# ergebnis:
bla
bla
Volk ist Opium für eine Religion.
-
- Beiträge: 1213
- Registriert: 09.11.2007 13:25:57
- Lizenz eigener Beiträge: GNU General Public License
-
Kontaktdaten:
Re: Bashscript / Wrapperscript
Das mit der temp. Datei wollte ich durch die Option -i von sed erledigen lassen. Aber warum das bei Nagazi so nicht funktioniert...
`-i[SUFFIX]'
`--in-place[=SUFFIX]'
This option specifies that files are to be edited in-place. GNU
`sed' does this by creating a temporary file and sending output to
this file rather than to the standard output.(1).
This option implies `-s'.
When the end of the file is reached, the temporary file is renamed
to the output file's original name.
`-i[SUFFIX]'
`--in-place[=SUFFIX]'
This option specifies that files are to be edited in-place. GNU
`sed' does this by creating a temporary file and sending output to
this file rather than to the standard output.(1).
This option implies `-s'.
When the end of the file is reached, the temporary file is renamed
to the output file's original name.
Re: Bashscript / Wrapperscript
Will meine Lösung nun posten da ich mich in die Materie eingelesen habe und das problem selbst gelöst habe.
Zuerst habe ich aber noch eine Frage an den User namens "i":
Was bringt im Startparameter das command -i ?
meine sed datei sieht wiefolgt aus:
Der fehler von "i" lag darin das er wie man oben sieht, vor der zu änderen Zeile z.B.
ein "$" eingebaut hat, habe bisher nochnicht rausgefunden was dieses Zeichen bewirkt da es in sed keine Variablen gibt.
Habe nun sein script genommen und alle "$" rauseditiert und nun läuft das script problemlos.
Meine "execute" Datei sieht wiefolgt aus;
Nun ändert sed alle 3 properties Parameter und bennent die Datei wieder richtig um, die Datei server.properties.new ist hinterher logischerweise nichtmehr aufzufinden.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Ich danke euch 2 da ihr mich in die Welt von sed "eingeführt" habt, bzw. mir den Ansporn gegeben habt das ich mich da mal durcharbeite.
Würde mich freuen wenn mir mal irgendwer ein Deutsches und ausführliches Tutorial posten kann, wie man die sogenannten "Bash-scripte" schreibt.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Neues kleines problemchen diesmal,
hab nun eine config datei welche in html geschrieben ist, wie mach ich es das er dieses parameter verändert;
So simpel ist das anscheinend nicht, habe jetzt
Zuerst habe ich aber noch eine Frage an den User namens "i":
Was bringt im Startparameter das command -i ?
meine sed datei sieht wiefolgt aus:
Code: Alles auswählen
# reset.sed-Datei
s/max-players=.*/max-players=20/
s/server-ip=.*/server-ip=127.0.0.0/
s/server-port=.*/server-port=25565/
Code: Alles auswählen
s/max-players=.*/max-players=20/
Habe nun sein script genommen und alle "$" rauseditiert und nun läuft das script problemlos.
Meine "execute" Datei sieht wiefolgt aus;
Code: Alles auswählen
sed -f reset.sed <server.properties >server.properties.new
mv server.properties.new server.properties
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Ich danke euch 2 da ihr mich in die Welt von sed "eingeführt" habt, bzw. mir den Ansporn gegeben habt das ich mich da mal durcharbeite.
Würde mich freuen wenn mir mal irgendwer ein Deutsches und ausführliches Tutorial posten kann, wie man die sogenannten "Bash-scripte" schreibt.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Neues kleines problemchen diesmal,
hab nun eine config datei welche in html geschrieben ist, wie mach ich es das er dieses parameter verändert;
Code: Alles auswählen
<max_players>32</max_players>
Code: Alles auswählen
s/<max_players>.*/<max_players>32</max_players>/
Problems on Windows? re-boot
Problems on Linux? be root
Problems on Linux? be root
Re: Bashscript / Wrapperscript
Da ja anscheinend keiner ne lösung hat Doppelposte ich mal damit das Thema nochmal gepusht wird und frage nochmal nach,
wie verbaut man einen asci code in dieses sed script wodurch das / ersetzt wird:
Es geht um das / nach der zahl 32.
wie verbaut man einen asci code in dieses sed script wodurch das / ersetzt wird:
Code: Alles auswählen
s/<max_players>.*/<max_players>32</max_players>/
Problems on Windows? re-boot
Problems on Linux? be root
Problems on Linux? be root
-
- Beiträge: 1213
- Registriert: 09.11.2007 13:25:57
- Lizenz eigener Beiträge: GNU General Public License
-
Kontaktdaten:
Re: Bashscript / Wrapperscript
Du musst nicht '/' zwingend zum Trennen nehmen.
Sonst ist das Thema Escapen:
Noch mal was ganz anderes praktisches: Selektives Ersetzen (Markieren und Einfügen)
Mit sed ist es auch möglich, Teile von Strings heraus zu picken um diese später zu verwenden. Diese Teile werden mit '\(' und '\)' markiert, und man kann auf diese Strings mit '\1', '\2' usw. zugreifen.
Quelle: http://www.tty1.net/sed-tutorium/sed-tutorium.html
MfG i
Code: Alles auswählen
$ echo "<max_players>test" | sed 's#<max_players>.*#<max_players>32</max_players>#'
<max_players>32</max_players>
Code: Alles auswählen
$ echo "<max_players>test" | sed 's/<max_players>.*/<max_players>32<\/max_players>/'
<max_players>32</max_players>
Mit sed ist es auch möglich, Teile von Strings heraus zu picken um diese später zu verwenden. Diese Teile werden mit '\(' und '\)' markiert, und man kann auf diese Strings mit '\1', '\2' usw. zugreifen.
Code: Alles auswählen
$ echo "davor <max_players> test </max_players> danach" | sed 's#^\(.*<max_players>\).*\(</max_players>.*\)#\132\2#'
davor <max_players>32</max_players> danach
MfG i
-
- Beiträge: 1213
- Registriert: 09.11.2007 13:25:57
- Lizenz eigener Beiträge: GNU General Public License
-
Kontaktdaten:
Re: Bashscript / Wrapperscript
Oh weh... $ ist das Zeilenende, ich wollte eigentlich ^ nehmen, den Zeilenanfang. Lese dazu vllt: https://secure.wikimedia.org/wikipedia/ ... r_AusdruckNagazi hat geschrieben: Der fehler von "i" lag darin das er ...
ein "$" eingebaut hat, habe bisher nochnicht rausgefunden was dieses Zeichen bewirkt da es in sed keine Variablen gibt.
Das reicht mir meist schon (Die Tabellen erklären das ganze Kurz und Gut).
Dank der Option -i solltest du das mit den Datenströmen (< und >) und mv nicht brauchen.Nagazi hat geschrieben: Meine "execute" Datei sieht wiefolgt aus;
Code: Alles auswählen
sed -f reset.sed <server.properties >server.properties.new mv server.properties.new server.properties
https://secure.wikimedia.org/wikibooks/ ... rammierungNagazi hat geschrieben: Würde mich freuen wenn mir mal irgendwer ein Deutsches und ausführliches Tutorial posten kann, wie man die sogenannten "Bash-scripte" schreibt.
Re: Bashscript / Wrapperscript
Jo klasse wusste nicht das sed noch andere Trennzeichen beinhaltet.
Was mache ich falsch ?
sehll wirft nen fehler aus das er dedicated_cfg.txt.new nicht finden kann. Wenn ich via FTP in dem Ordner nachgucke, ist dort aber die datei dadicated_cfg.txt.new vorhanden aber sie kann nicht geöffnet/gelöscht werden. Weder Putty noch WinSCP kann die datei verändern.
Denke mal sie ist einfach nur Temporär da sie nach einem reboot weg ist.
Wie kann das sein das sed die Datei nicht so abschließt das sie hinterher auch umbennent werden kann ?
Was mache ich falsch ?
Code: Alles auswählen
sed -f reset.sed <dedicated_cfg.txt >dedicated_cfg.txt.new
mv dedicated_cfg.txt.new dedicated_cfg.txt
Denke mal sie ist einfach nur Temporär da sie nach einem reboot weg ist.
Wie kann das sein das sed die Datei nicht so abschließt das sie hinterher auch umbennent werden kann ?
Problems on Windows? re-boot
Problems on Linux? be root
Problems on Linux? be root
Re: Bashscript / Wrapperscript
Okay hat sich schon erledigt, ich machs jetzt mit -i
Da erspar ich mir und dem server nen bisschen arbeit. (Und mir einige problem)
Danke für die Wiki, ich will mal gucken das ich mich dort nen bisschen durcharbeite
Da erspar ich mir und dem server nen bisschen arbeit. (Und mir einige problem)
Danke für die Wiki, ich will mal gucken das ich mich dort nen bisschen durcharbeite
Problems on Windows? re-boot
Problems on Linux? be root
Problems on Linux? be root