bash scripting vraagje

Windows, Android, iOS, Linux, Chrome OS, ...
Plaats reactie
Gebruikersavatar
trobbelke
Premium Member
Premium Member
Berichten: 502
Lid geworden op: 17 jul 2004, 00:46
Locatie: Lindale, TX
Uitgedeelde bedankjes: 2 keer

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,
Gebruikersavatar
Ofloo
Elite Poster
Elite Poster
Berichten: 5263
Lid geworden op: 04 okt 2004, 07:36
Locatie: BALEN
Uitgedeelde bedankjes: 57 keer
Bedankt: 92 keer

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..
crapiecorn
Elite Poster
Elite Poster
Berichten: 2149
Lid geworden op: 01 feb 2003, 11:58
Uitgedeelde bedankjes: 44 keer
Bedankt: 12 keer

Als ; tussen qoutes staat wordt deze gewoon als een literal gezien
Gebruikersavatar
Ken
Elite Poster
Elite Poster
Berichten: 4229
Lid geworden op: 04 apr 2005, 23:18
Locatie: België
Uitgedeelde bedankjes: 47 keer
Bedankt: 94 keer

\ ?

Internet = Proximus Business Flex Fiber 1000/100 & back-up Telenet Business Fibernet 300/30 Mbps
Fixed phone = OVH VoIP Entreprise
Mobile= Destiny Mobile Unlimited + Samsung S21
TV = FTA IPTV + Netflix
Network = 100% MikroTik powered
Car = Tesla Model 3 (Team blue)
Gebruikersavatar
Styno
Elite Poster
Elite Poster
Berichten: 1440
Lid geworden op: 06 nov 2003, 17:38
Locatie: Somewhere over the rainbow....

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'
echo '[q]sa[ln0=aln256%Pln256/snlbx]sb3135071790101768542287578439snlbxq'|dc
echo '16i[q]sa[ln0=aln100%Pln100/snlbx]sbA0D4D465452snlbxq'|dc
Afbeelding
crapiecorn
Elite Poster
Elite Poster
Berichten: 2149
Lid geworden op: 01 feb 2003, 11:58
Uitgedeelde bedankjes: 44 keer
Bedankt: 12 keer

Is het dan niet makkelijker de parameter te quoten ? Je weet uiteindelijk niet hoeveel woorden in die message gaan komen.
bv

Code: Selecteer alles

/tmp/pagertest.sh 511 "one two three"
en dan

Code: Selecteer alles

webpager.pl?pager=$1;message=$2"
Gebruikersavatar
trobbelke
Premium Member
Premium Member
Berichten: 502
Lid geworden op: 17 jul 2004, 00:46
Locatie: Lindale, TX
Uitgedeelde bedankjes: 2 keer

crapiecorn schreef:Is het dan niet makkelijker de parameter te quoten ? Je weet uiteindelijk niet hoeveel woorden in die message gaan komen.
bv

Code: Selecteer alles

/tmp/pagertest.sh 511 "one two three"
en dan

Code: Selecteer alles

webpager.pl?pager=$1;message=$2"
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.
crapiecorn
Elite Poster
Elite Poster
Berichten: 2149
Lid geworden op: 01 feb 2003, 11:58
Uitgedeelde bedankjes: 44 keer
Bedankt: 12 keer

Misschien moet je je data gescheiden door een delimiter doorgeven en dan in je .pl script exploden ?

Code: Selecteer alles

message=one,two,three

Code: Selecteer alles

 
my @values = split(',', $get_data);
Gebruikersavatar
trobbelke
Premium Member
Premium Member
Berichten: 502
Lid geworden op: 17 jul 2004, 00:46
Locatie: Lindale, TX
Uitgedeelde bedankjes: 2 keer

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.
crapiecorn
Elite Poster
Elite Poster
Berichten: 2149
Lid geworden op: 01 feb 2003, 11:58
Uitgedeelde bedankjes: 44 keer
Bedankt: 12 keer

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
Gebruikersavatar
trobbelke
Premium Member
Premium Member
Berichten: 502
Lid geworden op: 17 jul 2004, 00:46
Locatie: Lindale, TX
Uitgedeelde bedankjes: 2 keer

Dit werkt. Dank u wel!
Plaats reactie

Terug naar “Software en apps”