Pludselig fejler et bashscript.
Hey Gutter.
Jeg har gennem længere tid benyttet mig af et script der automatisk vælger kanal på min dreambox - der så opdaterer de kort der sidder i den.
Men pludselig er scriptet begyndt at fejle som jeg ikke aner hvorfor eller hvad jeg kan gøre?
Siger den hver gang jeg nu kører scriptet.
Selve scriptet ser således ud:
Kna nogen give mig en forklaring på dette problem og evt også en løsning.
Har testet om jeg evt skulle have lavet forkert charset mm - Men det str til UTF-8 ligesom selve serveren gør?
Så hvad gør jeg
Jeg har gennem længere tid benyttet mig af et script der automatisk vælger kanal på min dreambox - der så opdaterer de kort der sidder i den.
Men pludselig er scriptet begyndt at fejle som jeg ikke aner hvorfor eller hvad jeg kan gøre?
]# /scripts/dreambox.sh
/scripts/dreambox.sh: line 59: syntax error: unexpected end of file
Siger den hver gang jeg nu kører scriptet.
Selve scriptet ser således ud:
#!/bin/bash
#
# This script is made for changing channels automaticly so
# It'll update the keys on the dreambox
#
# My different params:
DREAMBOX="172.XXX.XXX.XXX"
# 1.number
function dice1()
{
RANGE=10
dice1=$RANDOM
(( dice1 %= $RANGE ))
}
# 2. number
function dice2()
{
RANGE=10
dice2=$RANDOM
(( dice2 %= $RANGE ))
}
# Findes fil med værdien for count ellers opret den med værdien 0
if [[ ! -e mycount.counter ]]; then
echo "count=0" > mycount.counter
fi
while [ true ]; do
# Hent værdien for count fra filen mycount.count
. mycount.counter
(( count += 1 ))
dice1
dice2
if [[ $count -eq 3 ]]; then
dice1=5
dice2=3
if [[ $count -eq 5 ]]; then
dice1=2
dice2=2
count=1
fi
# Gem den nye værdi for count i filen mycount.counter
echo "count=$count" > mycount.counter
cd /scripts/garbage
wget http://$DREAMBOX/cgi-bin/rc?$dice1
wget http://$DREAMBOX/cgi-bin/rc?$dice2
wget http://$DREAMBOX/cgi-bin/rc?352
echo $dice1
echo $dice2
echo $count
rm -rf /scripts/garbage/*
# EOF #
Kna nogen give mig en forklaring på dette problem og evt også en løsning.
Har testet om jeg evt skulle have lavet forkert charset mm - Men det str til UTF-8 ligesom selve serveren gør?
Så hvad gør jeg
Kommentarer17
Re: Pludselig fejler et bashscript.
Re: Pludselig fejler et bashscript.
men med et done - kommer denne fejl:
# /scripts/dreambox.sh
/scripts/dreambox.sh: line 48: syntax error near unexpected token `done'
/scripts/dreambox.sh: line 48: `done'
Re: Pludselig fejler et bashscript.
Men så vidt jeg kan se er der flere ting galt i scriptet.
I dit while loop bruger du nested if, men afslutter kun en if sætning med fi.
Desuden kan jeg ikke lige se hvornår det while loop er sat til at stoppe?
Re: Pludselig fejler et bashscript.
efter linie 39 indsæt tom linje
indsæt nu et fi på linje 40
indsæt en linie før # EOF # og skriv done på denne.
linien skal se sådan ud:
done
PS.
bash -n script-navn kontrollere for syntax uden at udføre noget
Re: Pludselig fejler et bashscript.
Originalty ville jeg mene det skulle se sådanne ud:
#!/bin/bash
#
# This script is made for changing channels automaticly so
# It'll update the keys on the dreambox
#
# My different params:
DREAMBOX="172.16.20.50"
# 1.number
function dice1()
{
RANGE=10
dice1=$RANDOM
(( dice1 %= $RANGE ))
}
# 2. number
function dice2()
{
RANGE=10
dice2=$RANDOM
(( dice2 %= $RANGE ))
}
# Findes fil med værdien for count ellers opret den med værdien 0
if [[ ! -e mycount.counter ]]; then
echo "count=0" > mycount.counter
fi
while [ true ]; do
# Hent værdien for count fra filen mycount.count
. mycount.counter
(( count += 1 ))
dice1
dice2
if [[ $count -eq 3 ]]; then
dice1=5
dice2=3
fi
if [[ $count -eq 5 ]]; then
dice1=2
dice2=2
count=1
fi
# Gem den nye værdi for count i filen mycount.counter
echo "count=$count" > mycount.counter
done
cd /scripts/garbage
wget http://$DREAMBOX/cgi-bin/rc?$dice1
wget http://$DREAMBOX/cgi-bin/rc?$dice2
wget http://$DREAMBOX/cgi-bin/rc?352
echo $dice1
echo $dice2
echo $count
rm -rf /scripts/garbage/*
# EOF #
Men så står den bare og starter scriptet men aldrig kommer videre eller afsluttes. så jeg er lidt blank her
Re: Pludselig fejler et bashscript.
Så lige hvad og hvor der er nogle ting der går galt - skal jeg ikke kunne sige - da jeg ikke er så meget inde i de enkelte bashscript funktioner.
Meningen er bare at jeg ønsker at sende en wget kommando 1 gang i timen der ænedrer hvilken kanal min DB står på og derefter (hver 5 gang sikrer jeg mig det er den samme kanal)
Re: Pludselig fejler et bashscript.
Og hvorfor har du 2 metoder som laver præcis det samme?
Hvad laver dine 2 if sætninger i while løkken?
Er det bare helt tilfældige tal du skal have ud?
Mest fordi jeg ikke forstår hvorfor du spørger om count er lig 3 eller 5 og udfra det giver værdierne noget andet..
Hvis du kommer med en præcis forklaring på hvad scriptet skal kunne, så kan det være lettere at få hjælp..
Re: Pludselig fejler et bashscript.
Her vil din løkke køre sålænge ok er lig 0
i eksemplet vil ok skifte værdi hvis $count bliver lig med 5, og derved vil løkken ikke genstarte.
ok=0
while [ $ok -eq 0 ]; do
# Hent værdien for count fra filen mycount.count
. mycount.counter
(( count += 1 ))
dice1
dice2
if [[ $count -eq 3 ]]; then
dice1=5
dice2=3
fi
if [[ $count -eq 5 ]]; then
dice1=2
dice2=2
count=1
ok=1
fi
# Gem den nye værdi for count i filen mycount.counter
echo "count=$count" > mycount.counter
done
Re: Pludselig fejler et bashscript.
Ubuntu havde en overgang et skift fra traditionel bash til 'dash' som vist skulle være en tand hurtigere men det var ikke alle bash scripts der ville køre på det (et par af mine gik helt i møg :/ )
For ubuntu's tilfælde var /bin/bash vist symlinked til /bin/dash or something. Dette er skrevet på hukommelsen men det lyder som en mulighed såfremt du er sikkert på at du ikke selv har pillet i scriptet...
Pakken dash også at finde i andre distributioner, her er beskrivelsen fra Arch's package manager (pacman):
core/dash 0.5.4-4 (base)
A POSIX compliant shell that aims to be as small as possible
Re: Pludselig fejler et bashscript.
Jeg har en dreambox stående til afkodning af DVB-S signal med 2 stk abonnementkort i. Da jeg ikke bruger den til andet end afkodning - ville jeg gerne skifte kanaler ind i mellem for at opdatere disse koder.
Hver 3 gang den skifter kanal skal den havdne på program 40 og hver 5 gang på kanal12 - da det er disse 2 steder hvor koderne hentes nemmest. Dette gøres 1gang i timen via /etc/cron.hourly
Dette script vælger 2tal tilfældigt ud og sender til sidst en wget kommando til dreamboxen interface, som derefter skifter kanal og koderne bliver opdateret.
Da min dreambox derefter deler koderne ud til mit MythTV center og derfor virker DVB-S i mit MythTV setup.
men har flere gange nu prøvet at skulle ud og manuelt opdatere koderne ved hjælp af skift på dreamboxen og i værste tilfælde skulle over og have kortene i originalboxen.
Det var lidt omkring forklaringen om hvad skriptet hjælper.
Det er desværre den eneste måde hvor man kan skifte kanaler på en dreambox via Mythtvcenter. Men det er jo noget den skal gøre automatisk således at koderne konstant er opdateret.
Det stykke af scriptet her:
cd /scripts/garbage
wget http://$DREAMBOX/cgi-bin/rc?$dice1
wget http://$DREAMBOX/cgi-bin/rc?$dice2
wget http://$DREAMBOX/cgi-bin/rc?352
Hopper over i en bestemt mappe og udfører wget kommandoen - da den efterlader en lille fil - har jeg lavet det således at dette gøres i en bestemt mappe - som derefter tømmes og filerne slettes.
Re: Pludselig fejler et bashscript.
Evt prøv at sikre dig at charset for filen er det samme som den der er sat i din bash.rc fil.
Re: Pludselig fejler et bashscript.
1. Betyder det noget hvilket kanal du skifter hend paa? eller skal du skifte til kanal 40 og kanal 12?
2. Hvis ja, hvor lang tid skal der gaa imellem skift paa disse kanaler?
3. Hvad er formaalet med at skifte kanal tilfaeldigt?
4. Skifter du kanal med at hente addresse wget http://$DREAMBOX/cgi-bin/rc?352 ?
- Hvor kanal er 352
Re: Pludselig fejler et bashscript.
#!/bin/bash
#
# This script is made for changing channels automaticly so
# It'll update the keys on the dreambox
#
# My different params:
DREAMBOX="172.XXX.XXX.XXX"
# 1.number
function dice1()
{
RANGE=10
dice1=$RANDOM
let "dice1 %= $RANGE"
}
# 2. number
function dice2()
{
RANGE=10
dice2=$RANDOM
let "dice2 %= $RANGE"
}
# Findes fil med værdien for count ellers opret den med værdien 0
if [ ! -e mycount.counter ]; then
echo "count=0" > mycount.counter
fi
# Hent værdien for count fra filen mycount.count
source mycount.counter
let "count += 1"
dice1
dice2
echo "dice1: $dice1"
echo "dice2: $dice2"
echo "count: $count"
if [ "$count" = "3" ]; then
dice1=5
dice2=3
fi
if [ "$count" = "5" ]; then
dice1=2
dice2=2
count=0
fi
# Gem den nye værdi for count i filen mycount.counter
echo "count=$count" > mycount.counter
wget -O - http://$DREAMBOX/cgi-bin/rc?$dice1 > /dev/null
wget -O - -q http://$DREAMBOX/cgi-bin/rc?$dice2 > /dev/null
wget -O - -q http://$DREAMBOX/cgi-bin/rc?352 > /dev/null
echo $dice1
echo $dice2
echo $count
# EOF #
# 12
Jamen det har lige
Jamen det har lige været arbejdsweekend så det tog lidt tid.
1. ja det betyder noget hvilken kanal man skifter hen på - alt efter hvilken satelit programmet bliver sendt fra.
2. 1.gang i timen = /etc/cron.hourly
3. Omkring det at skifte kanaler tilfældigt er mere de enkelte specifikke kanaler, hvor der er nogle extra koder som bliver opdateret.
Ideen er at skifte imellem de 2 sateliter - 1grad vest og 5grader øst.
Koderne bliver først opdateret/hentet idet dreambox skifter til kanalen.
4. ja det gør man.
Dreamboxen har et webinterface - hvor der laves en fjernbetjening man kan trykke på.
Denne wget kommanbdo er taget ud fra denne fjernbetjening omkring kanalskift fra denne.
Håber det var svar nok.
#13 - takker - kigger på sklriptet og tester det lidt senere!
Re: Pludselig fejler et bashscript.
Ville det være nemmere på en eller anden måde
Det kan du let:
case "`expr
case "`expr $(date +%H) % 2`" in
0) echo lige ;;
1) echo ulige ;;
*) echo fejl ;;
esac
Re: Pludselig fejler et bashscript.
kanal-shift.sh
#!/bin/bash
# Filen kanalliste indeholder liste over kanaler jeg vil skifte hend paa
LISTE="kanalliste"
DEAMBOX="192.168.x.x"
# Skift hend paa kanalerne i filen, en efter en
for NR in $(cat $LISTE)
do
wget -o /dev/null -O /dev/null "http://$DREAMBOX/cgi-bin/rc?$NR"
sleep 1
done