Pagina 1 van 1
bash scripting vraagje
Geplaatst: 23 jan 2009, 16:38
door trobbelke
Hallo,
Ik ben aan het proberen om een script te maken om vanuit Zabbix berichtjes te krijgen op onze pagers. De uiteindelijke output moet dit worden:
Code: Selecteer alles
wget 'http://pagerserver.mercyships.org/cgi-bin/pager/webpager.pl?pager=511;message=one two three'
De output van Zabbix is dit: "/tmp/pagertest.sh 511 one two three" waarbij het probleem waar ik mee zit de spaties zijn. Het eerste argument is de pager nummer, alle andere argumenten horen bij de message, en ik slaag er niet in om de output goed te krijgen.
Heeft er iemand genoeg verstand van bash scripting om mij op weg te helpen?
Thanks,
Re: bash scripting vraagje
Geplaatst: 23 jan 2009, 19:11
door Ofloo
ik neem aan dat message bij de url hoort, .. dan zou je spaties met %20 kunnen vervangen, of is dat een nieuw commando omdat er een ; tussen staat, .. het is een beetje verwarrend het de quotes wijzen erop dat het 1 geheel is het ";" teken wijst erop dat je 2 commandos probeert uit te voeren op 1 lijn..
Re: bash scripting vraagje
Geplaatst: 23 jan 2009, 19:17
door crapiecorn
Als ; tussen qoutes staat wordt deze gewoon als een literal gezien
Re: bash scripting vraagje
Geplaatst: 23 jan 2009, 20:05
door Ken
\ ?
Re: bash scripting vraagje
Geplaatst: 23 jan 2009, 20:50
door Styno
helpt dit?
Code: Selecteer alles
styno@origami:/$ ls -al /tmp/pagertest.sh
-rwxr-xr-x 1 styno styno 133 2009-01-23 20:49 /tmp/pagertest.sh
styno@origami:/$ cat /tmp/pagertest.sh
echo cmd: $0
echo eerste argument: $1
echo tweede argument: $2
echo derde argument: $3
echo vierde argument: $4
echo process id: $$
styno@origami:/$ /tmp/pagertest.sh 511 one two three
cmd: /tmp/pagertest.sh
eerste argument: 511
tweede argument: one
derde argument: two
vierde argument: three
process id: 18080
btw. als je die wget in dat scriptje wil:
Code: Selecteer alles
wget "http://pagerserver.mercyships.org/cgi-bin/pager/webpager.pl?pager=$1;message=$2 $3 $4"
de output van wget laat zien dat de spaties automagically vervangen worden door %20's:
Code: Selecteer alles
--20:56:32-- http://pagerserver.mercyships.org/cgi-bin/pager/webpager.pl?pager=511;message=one%20two%20three
=> `webpager.pl?pager=511;message=one two three'
Re: bash scripting vraagje
Geplaatst: 23 jan 2009, 21:13
door crapiecorn
Is het dan niet makkelijker de parameter te quoten ? Je weet uiteindelijk niet hoeveel woorden in die message gaan komen.
bv
en dan
Re: bash scripting vraagje
Geplaatst: 24 jan 2009, 00:28
door trobbelke
crapiecorn schreef:Is het dan niet makkelijker de parameter te quoten ? Je weet uiteindelijk niet hoeveel woorden in die message gaan komen.
bv
en dan
heb ik geprobeerd met quotes, backslashes, dubbele backslashes, maar bij de eerste spatie stopt het. Als ik de wget lijn manueel uitvoer, met spaties en al, dan werkt het, maar ik moet het in een script hebben, en een onbekend aantal arguments moeten samengevoegd worden, en daar zit ik vast.
De ; is geen enkel probleem, bij al m'n testen komt het eerste woord van de message aan op de pager, dus m'n perl script op de pager server heeft er geen moeite mee.
Re: bash scripting vraagje
Geplaatst: 24 jan 2009, 00:52
door crapiecorn
Misschien moet je je data gescheiden door een delimiter doorgeven en dan in je .pl script exploden ?
Re: bash scripting vraagje
Geplaatst: 24 jan 2009, 11:22
door trobbelke
Ik wil liever niet raken aan het perl script op de pager server, omdat onze wiki ook een script heeft om pager messages te zenden. En aan die wiki applicatie kan ik niets veranderen.
Ik probeer dit aan het werk te krijgen:
Code: Selecteer alles
#!/bin/bash
# The pager number is the first parameter, message is the rest
all_args="$*"
message=${all_args#"$1 "}
cmd="wget 'http://pagerserver.mercyships.org/cgi-bin/pager/webpager.pl?pager=$1;message=$message'"
$cmd
Dit werkt niet, vanwege een fout in de wget lijn. Ik denk dat de methode om de argumenten bijeen te krijgen, wel goeed is.
Re: bash scripting vraagje
Geplaatst: 24 jan 2009, 12:17
door crapiecorn
Code: Selecteer alles
#!/bin/bash
# The pager number is the first parameter, message is the rest
all_args="$*"
mess=${all_args#"$1 "}
string="http://pagerserver.mercyships.org/cgi-bin/pager/webpager.pl?pager=$1;message=$mess"
wget "$string";
Dit zou moeten werken
Re: bash scripting vraagje
Geplaatst: 25 jan 2009, 11:46
door trobbelke
Dit werkt. Dank u wel!