Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: bash script "teller" (for/do/done)  (gelezen 2324 keer)

pbecks

  • Gast
bash script "teller" (for/do/done)
« Gepost op: 2008/01/30, 20:46:27 »
Hallo,

Ik heb een scriptje waarmee ik een teller terug laat tellen van 60 naar 0 (en daarna wil ik dat het script opnieuw begint met aftellen)

Ik krijg alleen nog niet voor elkaar dat het script opnieuw begint te af te tellen.

Onderstaand het script:



#!/bin/bash
i=-60
for i < 1
do
        for i in `seq -60 0`;
        do
                echo $i seconden tot volgende update! > /home/patrick/scripts/count.txt
      echo $i seconden tot volgende update!
   sleep 1
        done
i=-60
done



Zie jij wat ik fout doe?

Offline woteb

  • Lid
  • Steunpunt: Nee
bash script "teller" (for/do/done)
« Reactie #1 Gepost op: 2008/01/30, 22:05:51 »
Een aanvullende vraag: Wat wil je met dit scriptje gaan doen?
Laptop, HP 550, Dual Core 1 GB RAM/2 Ghz:: Debian 5.0 Testing (Squeeze)  (lite-blokkendoos editie) Fluxbox / IceWM / XFCE4 / Openbox / LXDE.
3 Werkstations + 1 laptop: Debian 5.0 Testing (Squeeze)  (lite-blokkendoos editie Gnome/XFCE/IceWM)
Server: Debian 5.0 Stable (Lenny)

Offline ivo

  • Lid
  • Steunpunt: Nee
bash script "teller" (for/do/done)
« Reactie #2 Gepost op: 2008/01/30, 22:30:45 »
Citaat van: pbecks
Hallo,

Ik heb een scriptje waarmee ik een teller terug laat tellen van 60 naar 0 (en daarna wil ik dat het script opnieuw begint met aftellen)

Ik krijg alleen nog niet voor elkaar dat het script opnieuw begint te af te tellen.

Onderstaand het script:



#!/bin/bash
i=-60
for i < 1
do
        for i in `seq -60 0`;
        do
                echo $i seconden tot volgende update! > /home/patrick/scripts/count.txt
      echo $i seconden tot volgende update!
   sleep 1
        done
i=-60
done



Zie jij wat ik fout doe?
Je wilt elke minuut iets laten uitvoeren?

Waarom geen crontab?

* * * * * /waar/jouw/script/staat/jouwscript.sh

in jouwscript.sh zet je wat je wilt uitvoeren.
There are only 10 types of people in the world; those who understand binary and those who don't.

Offline desmond

  • Lid
  • Steunpunt: Nee
bash script "teller" (for/do/done)
« Reactie #3 Gepost op: 2008/01/30, 22:41:45 »
Disclaimer: Ik ben geen programmeur. :-)

Je zal er nog een (while) loop overheen kunnen leggen met een expressie die immer waar is (oneindige loop)

Citaat
n = 0
while [ $n == 0 ]
do
  i=-60
  for i < 1
   do
        for i in `seq -60 0`;
        do
                echo $i seconden tot volgende update! > /home/patrick/scripts/count.txt
        echo $i seconden tot volgende update!
        sleep 1
   done
done

Offline ivo

  • Lid
  • Steunpunt: Nee
bash script "teller" (for/do/done)
« Reactie #4 Gepost op: 2008/01/30, 22:57:33 »
Citaat van: desmond
Disclaimer: Ik ben geen programmeur. :-)

Je zal er nog een (while) loop overheen kunnen leggen met een expressie die immer waar is (oneindige loop)

Citaat
n = 0
while [ $n == 0 ]
do
  i=-60
  for i < 1
   do
        for i in `seq -60 0`;
        do
                echo $i seconden tot volgende update! > /home/patrick/scripts/count.txt
        echo $i seconden tot volgende update!
        sleep 1
   done
done
Of simpeler:

while true
do
jouw script of commando of whatever
sleep 60
done
There are only 10 types of people in the world; those who understand binary and those who don't.

pbecks

  • Gast
bash script "teller" (for/do/done)
« Reactie #5 Gepost op: 2008/01/31, 09:36:57 »
Hallo luitjes,

Het script zou het volgende moeten doen:

een tekstbestand aanmaken waarin VOORTDUREND word afgeteld van 60 naar 0.

De inhoud van het bestand gebruik ik in "conky" (een systeem monitor appl.)

${tail /home/patrick/scripts/count.txt 1}

om aan te geven hoe lang het nog duurt voordat een ander script (dat aan conky "hangt") word uitgevoerd.

Af laten tellen van 60 naar 0 in een bestand lukt wel maar het dan opnieuw laten verlopen lukt nog niet.

(ik ga straks de tip van Desmond proberen)

pbecks

  • Gast
bash script "teller" (for/do/done)
« Reactie #6 Gepost op: 2008/01/31, 10:07:07 »
Hallo,

het volgende script:

#!/bin/bash
n = 0
while [ $n == 0 ]
do
  i=-60
  for i < 1
   do
        for i in `seq -60 0`;
        do
                echo $i seconden tot volgende update! > /home/patrick/scripts/count.txt
        echo $i seconden tot volgende update!
        sleep 1
   done
done

Geeft de volgende foutmelding:

patrick@patrick-desktop:~/scripts$ sh counttest.sh
counttest.sh: 2: n: not found
counttest.sh: 6: Syntax error: redirection unexpected (expecting "do")

pbecks

  • Gast
bash script "teller" (for/do/done)
« Reactie #7 Gepost op: 2008/01/31, 10:19:43 »
GELUKT!

#!/bin/bash
n=0
while [ $n <> 0 ]
do
        for i in `seq -60 0`;
        do
                echo $i seconden tot volgende update! > /home/patrick/scripts/count.txt
      echo $i seconden tot volgende update!
   sleep 1
        done
done



Iedereen bedankt voor de input!!

Offline profoX

  • Lid
    • wesley
    • Lionslink
  • Steunpunt: Nee
bash script "teller" (for/do/done)
« Reactie #8 Gepost op: 2008/01/31, 10:25:03 »
Ik gok dat je zoiets wil?

Citaat
#!/bin/sh
while true
do
  for i in $(seq 60 -1 1)
  do
    echo $i seconden tot volgende update! | tee /home/patrick/scripts/count.txt
    sleep 1
  done
  echo UPDATE!
done
Telt onophoudend van 60 af naar een update en voert dan telkens de 'echo UPDATE!' uit.

Opmerking: tijd voor een update is ongeveer 1 minuut, maar is niet exact 1 minuut, het zal iets langer duren omdat er naast de sleep nog andere dingetjes verwerkt worden, al is het niet veel, uit de output van 'time' leidt ik af dat het op mijn pc 19ms vertraging heeft per minuut
Human Knowledge Belongs To The World -- Antitrust (2001)
Nederlandstalige Ubuntu documentatie van Ubuntu-NL (wiki)