• Opret dig
  • Glemt adgangskode

User account menu

  • Artikler
  • Forside
  • Forum
  • Nyheder
  • Log ind
Hjem
LinuxIN.dk

Snak med

Opret dig!

Af peque | 08.01.2009 11:12

Pludselig fejler et bashscript.

Hjælp generelt
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?


]# /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
  • Log ind eller opret dig for at tilføje kommentarer

Kommentarer17

# 1

16 år 6 måneder siden

Permalink

Indsendt af marson den 8. januar 2009 kl. 11:23

Permalink

Re: Pludselig fejler et bashscript.

har ikke så meget forstand på bash scripting, men mangler der ikke et "done" i while løkken?
  • Log ind eller opret dig for at tilføje kommentarer

# 2

16 år 6 måneder siden

Permalink

Indsendt af peque den 8. januar 2009 kl. 11:59

Permalink

Re: Pludselig fejler et bashscript.

Det har der ikke tidligere stået men så fejler den endnu mere, men den originale ide som folk herinde også hjalp med pga tilfældige tal har virket indtil for nyligt

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'

  • Log ind eller opret dig for at tilføje kommentarer

# 3

16 år 6 måneder siden

Permalink

Indsendt af cn den 8. januar 2009 kl. 12:16

Permalink

Re: Pludselig fejler et bashscript.

Fejlen kan sådan set være flere ting.

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?

  • Log ind eller opret dig for at tilføje kommentarer

# 4

16 år 6 måneder siden

Permalink

Indsendt af kop den 8. januar 2009 kl. 12:29

Permalink

Re: Pludselig fejler et bashscript.

Hej prøv nedenstående

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
  • Log ind eller opret dig for at tilføje kommentarer

# 5

16 år 6 måneder siden

Permalink

Indsendt af peque den 8. januar 2009 kl. 12:30

Permalink

Re: Pludselig fejler et bashscript.

Nu har jeg så også roddet frem og tilbage med det - Men hvis du har en løsning på det relle problem. så er jeg lutter ører

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
  • Log ind eller opret dig for at tilføje kommentarer

# 6

16 år 6 måneder siden

Permalink

Indsendt af peque den 8. januar 2009 kl. 12:44

Permalink

Re: Pludselig fejler et bashscript.

Har nu også prøvet med at sætte edone helt nede i bunden og der løber den så rundt i ring ??
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)
  • Log ind eller opret dig for at tilføje kommentarer

# 7

16 år 6 måneder siden

Permalink

Indsendt af cn den 8. januar 2009 kl. 13:33

Permalink

Re: Pludselig fejler et bashscript.

Det er jo klart while sætningen altid vil køre, når du bruger while [ true ] og ikke ændre på dette.

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..
  • Log ind eller opret dig for at tilføje kommentarer

# 8

16 år 6 måneder siden

Permalink

Indsendt af kop den 8. januar 2009 kl. 16:38

Permalink

Re: Pludselig fejler et bashscript.

Prøv noget ligende nedenstående.
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
  • Log ind eller opret dig for at tilføje kommentarer

# 9

16 år 6 måneder siden

Permalink

Indsendt af Anonym7 den 8. januar 2009 kl. 18:20

Permalink

Re: Pludselig fejler et bashscript.

Måske har din distribution skiftet shell ?

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
  • Log ind eller opret dig for at tilføje kommentarer

# 10

16 år 6 måneder siden

Permalink

Indsendt af peque den 9. januar 2009 kl. 09:02

Permalink

Re: Pludselig fejler et bashscript.

En forklaring omkring hvad skriptet laver:
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.
  • Log ind eller opret dig for at tilføje kommentarer

# 11

16 år 6 måneder siden

Permalink

Indsendt af dudsen den 10. januar 2009 kl. 15:07

Permalink

Re: Pludselig fejler et bashscript.

Der er en række forkete/extra whitespace chars efter "echo $count" kan du prøve at slette dem.

Evt prøv at sikre dig at charset for filen er det samme som den der er sat i din bash.rc fil.
  • Log ind eller opret dig for at tilføje kommentarer

# 12

16 år 6 måneder siden

Permalink

Indsendt af genman den 10. januar 2009 kl. 17:23

Permalink

Re: Pludselig fejler et bashscript.

Har lige et par spoergsmaal, for det giver ikke noglen mening hvad du skriver og hvad skripetet rent faktisk goer.

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

  • Log ind eller opret dig for at tilføje kommentarer

# 13

16 år 6 måneder siden

Permalink

Indsendt af glemsom den 11. januar 2009 kl. 10:24

Permalink

Re: Pludselig fejler et bashscript.

Well - jeg vil gå ud fra dette burde virke:

#!/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 #
  • Log ind eller opret dig for at tilføje kommentarer

# 14

16 år 6 måneder siden

Permalink

Indsendt af peque den 11. januar 2009 kl. 11:52

Permalink

# 12
Jamen det har lige

# 12
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!

  • Log ind eller opret dig for at tilføje kommentarer

# 15

16 år 6 måneder siden

Permalink

Indsendt af peque den 12. januar 2009 kl. 11:11

Permalink

Re: Pludselig fejler et bashscript.

Kunne man evt sætte et scipt samme nder i lige timer vælger kanal12 og i ulige timer vælger kanal 40 ??

Ville det være nemmere på en eller anden måde
  • Log ind eller opret dig for at tilføje kommentarer

# 16

16 år 6 måneder siden

Permalink

Indsendt af divineant den 12. januar 2009 kl. 11:55

Permalink

Det kan du let:
case "`expr

Det kan du let:


case "`expr $(date +%H) % 2`" in
0) echo lige ;;
1) echo ulige ;;
*) echo fejl ;;
esac

  • Log ind eller opret dig for at tilføje kommentarer

# 17

16 år 6 måneder siden

Permalink

Indsendt af genman den 12. januar 2009 kl. 13:52

Permalink

Re: Pludselig fejler et bashscript.

Som jeg laeser det, vil det her vaere den simpelste loesning

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
  • Log ind eller opret dig for at tilføje kommentarer

Svar søges

llumos Unix-operativsystem, 0
Den er go 0
14. februar = I Love Free Software Day 0
Lokal fil-deling - for de dovne. 0
Linux fra begynder til professionel af O'Reilly 0

Seneste aktivitet

Ubuntu touch 1
Ekstern Blu-ray-brænder, der fungerer med PCLinuxOS 6
Hvad med en afstemming Malar 5
Virtuel maskine? 6
PCLinuxOS 40
den er sjov 3
Reserve kernel og btrfs 3
En snak om Linux-kompatibel software 12
"Intet realistisk alternativ" - mig i r*ven 17
Open source events i danmark? 3
Gode anmeldelser Zorin OS 17.3 8
Open Source-eksperimentet 5
Nulstilling af adgangskode 6
Ingen Mint 5
Linux App Store Flathub når 3 milliarder downloads 2
Digitaliseringsministeriet sætter gang i pilotprojekt om digital suverænitet 3
Mest sikker webbrowser 5
Firefox 2
Privatbeskeder 7
Backup/synkronisering? 3

© 2025 Linuxin og de respektive skribenter

Oprettet og drevet af nørder siden 2004 !