Nieuws:

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

Auteur Topic: hulp bij scriptje  (gelezen 1400 keer)

Offline Thomas de Graaff

  • Lid
  • Steunpunt: Nee
hulp bij scriptje
« Gepost op: 2008/03/28, 13:55:32 »
Ik heb twee datagetallen in twee tekstbestandjes van het volgende format:

yyyy:MM:dd hh:mm:ss

bijvoorbeeld, "cat bestandnaam1" geeft:
2008:10:13 23:56:56

dat is 13 oktober 2008 om 23:56:56

nu zou ik in een bash scriptje willen kijken welke datum eerder is, iemand een tip hoe dit te doen?

Inlezen in een variabele lukt wel:

variabele1 = `cat bestandnaam1`
variabele2 = `cat bestandnaam2`
if $variabele > $variabel2
then .....
else .....
fi

Alvast hartelijk dank, want voor ik het zelf uitgezocht heb ben ik waarschijnlijk een dag verder..

nu is de bovenstaande vergelijking natuurlijk niet goed.. maar hoe wel?

Offline siegi

  • Lid
  • Steunpunt: Nee
hulp bij scriptje
« Reactie #1 Gepost op: 2008/03/28, 14:29:59 »
Ik zou naar een functie zoeken om het in stukken te kappen.
Eerst jaar vergelijken als dit hetzelfde is dan dan maand vergelijken en zo verder.

http://user.it.uu.se/~matkin/documents/shell/ hier vond ik volgens mij al wat bruikbare code.

Offline markba

  • Lid
    • http://markbaaijens.nl/
  • Steunpunt: Ja
hulp bij scriptje
« Reactie #2 Gepost op: 2008/03/28, 15:53:31 »
Kijk hier eens:
http://tldp.org/LDP/Bash-Beginners-Guide/html/Bash-Beginners-Guide.html

Specifiek de onderdelen sed en awk, samen met de talrijke voorbeelden, zouden de oplossing voor jou kunnen betekenen.

Happy bashing!

Offline Thomas de Graaff

  • Lid
  • Steunpunt: Nee
hulp bij scriptje
« Reactie #3 Gepost op: 2008/03/28, 16:04:08 »
Bedankt voor de tips!

ik ben inmiddels een stukje op weg.

#! /bin/bash
variabele1=`cat /home/stommie/test/updtime1`
variabele2=`cat /home/stommie/test/updtime2`
echo $variabele1
echo $variabele2
jaar1=`awk -F: '{print $1}' /home/stommie/test/updtime1`
maand1=`awk -F: '{print $2}' /home/stommie/test/updtime1`
dag1=`awk -F: '{print $3}' /home/stommie/test/updtime1`
uur1=`awk -F: '{print $4}' /home/stommie/test/updtime1`
minuut1=`awk -F: '{print $5}' /home/stommie/test/updtime1`
sec1=`awk -F: '{print $6}' /home/stommie/test/updtime1`
jaar2=`awk -F: '{print $1}' /home/stommie/test/updtime2`
maand2=`awk -F: '{print $2}' /home/stommie/test/updtime2`
dag2=`awk -F: '{print $3}' /home/stommie/test/updtime2`
uur2=`awk -F: '{print $4}' /home/stommie/test/updtime2`
minuut2=`awk -F: '{print $5}' /home/stommie/test/updtime2`
sec2=`awk -F: '{print $6}' /home/stommie/test/updtime2`
echo $jaar1 $maand1 $dag1 $uur1 $minuut1 $sec1
echo $jaar2 $maand2 $dag2 $uur2 $minuut2 $sec2
Dus de boel is in stukken gehakt, en ik heb variabelen met jaar, maand, dag, uur, minuut en seconde.

Nu wil ik deze variabelen vergelijken. Hoe dat moet weet ik nog niet.

if $(($jaar1)) > $(($jaar2))
then echo $jaar1
else echo $jaar2
fi
Maar dit geeft een foutmelding

Offline SeySayux

  • Lid
    • SeySayux.net
  • Steunpunt: Nee
hulp bij scriptje
« Reactie #4 Gepost op: 2008/03/28, 16:37:08 »
if [ $((jaar1)) -gt $((jaar2)) ]; then
  echo $jaar1
else
  echo $jaar2
fi
- SeySayux
I use a Unix-based system, that means I'll get laid as often as I have to reboot.
LibSylph
SeySayux.net

Offline Thomas de Graaff

  • Lid
  • Steunpunt: Nee
hulp bij scriptje
« Reactie #5 Gepost op: 2008/03/28, 17:30:59 »
Citaat van: SeySayux
if [ $((jaar1)) -gt $((jaar2)) ]; then
  echo $jaar1
else
  echo $jaar2
fi
- SeySayux
Super, dat lijkt te werken. Alleen als $jaar1 hetzelfde is als $jaar twee geeft hij krijg ik toch een jaartal op het scherm te zien. Is -gt vergelijkbaar met >= ?

Hahaha... duhhh... ik was niet aan het nadenken!

Bedankt!

Offline SeySayux

  • Lid
    • SeySayux.net
  • Steunpunt: Nee
hulp bij scriptje
« Reactie #6 Gepost op: 2008/03/28, 18:09:50 »
even de codes voor getalvergelijking:
-eq -> ==
-ne -> !=
-gt -> >
-lt -> <
-ge -> >=
-le -> <=

- SeySayux
I use a Unix-based system, that means I'll get laid as often as I have to reboot.
LibSylph
SeySayux.net

Offline Thomas de Graaff

  • Lid
  • Steunpunt: Nee
hulp bij scriptje
« Reactie #7 Gepost op: 2008/03/28, 21:26:45 »
Ik heb zojuist een script geschreven in nano, nu wil ik deze testen, maar krijg ik foutmeldingen die volgens mij veroorzaakt worden doordat commando lijnen langer dan één regel in nano worden gebroken. Is nano zo in te stellen dat deze niet op een volgende lijn verder gaat als ik een regel aan het tikken ben, maar alleen wanneer ik een enter geef?

Offline Thomas de Graaff

  • Lid
  • Steunpunt: Nee
hulp bij scriptje
« Reactie #8 Gepost op: 2008/03/29, 00:02:07 »
Citaat van: SeySayux
if [ $((jaar1)) -gt $((jaar2)) ]; then
  echo $jaar1
else
  echo $jaar2
fi
- SeySayux
Allen nogmaals bedankt, dit heeft me uren gescheeld!

Heb nu trouwens geen awk meer gebruikt om de data en tijden uit het bestand te halen, dat ging toch niet goed. Nu heb ik daarvoor cut gebruikt, werkt zeker zo makkelijk:

jaara=`cut -c 1-4 /proc/acpi/alarm`
maanda=`cut -c 6-7 /proc/acpi/alarm`
daga=`cut -c 9-10 /proc/acpi/alarm`
uura=`cut -c 12-13 /proc/acpi/alarm`
minuuta=`cut -c 15-16 /proc/acpi/alarm`
seca=`cut -c 18-19 /proc/acpi/alarm`
hele script:
#! /bin/bash

# scriptje dat updatetijd wegschrijft naar acpi-alarm als deze vóór opname is

# *****************************************************
#  /proc/acpi/alarm om starttijd te lezen en schrijven
# **********************************************************




# **************************************************8
# kijk of updatetijd vandaag of morgen 6:00 is
# *****************************************************

if [ $((`date +%k`)) -gt 6 ]; then
  update=`date --date=tomorrow +%Y:%m:%d\ 06:00:00`
  jaaru=`date --date=tomorrow +%Y`
  maandu=`date --date=tomorrow +%m`
  dagu=`date --date=tomorrow +%d`
else
  update=`date +%Y:%m:%d\ 06:00:00`
  jaaru=`date +%Y`
  maandu=`date +%m`
  dagu=`date +%d`
fi



# ***********************************************************************
#   lezen alarm
# *************************************************************************

jaara=`cut -c 1-4 /proc/acpi/alarm`
maanda=`cut -c 6-7 /proc/acpi/alarm`
daga=`cut -c 9-10 /proc/acpi/alarm`
uura=`cut -c 12-13 /proc/acpi/alarm`
minuuta=`cut -c 15-16 /proc/acpi/alarm`
seca=`cut -c 18-19 /proc/acpi/alarm`


# ********************************************************
# als alarm na update dan update wegschrijven naar alarm
# *********************************************************

werk=0

if [ $((jaara)) -gt $((jaaru)) ]; then
  werk=1
elif [ $((jaara)) -eq $((jaaru)) ] && [ $((maanda)) -gt $((maandu)) ]; then
  werk=1
elif [ $((jaara)) -eq $((jaaru)) ] && [ $((maanda)) -eq $((maandu)) ] && [ $((daga)) -gt $((dagu)) ]; then
  werk=1
elif [ $((jaara)) -eq $((jaaru)) ] && [ $((maanda)) -eq $((maandu)) ] && [ $((daga)) -eq $((dagu)) ] && [ $((uura)) -gt 5 ]; then
  werk=1
fi




# ******************************************************************
# als alarm voor nu dan wegschrijven update naar alarm
# *******************************************************************

if [ $((jaara)) -lt $((`date +%Y`)) ]; then
  werk=1
elif [ $((jaara)) -eq $((`date +%Y`)) ] && [ $((maanda)) -lt $((`date +%m`)) ]; then
  werk=1
elif [ $((jaara)) -eq $((`date +%Y`)) ] && [ $((maanda)) -eq $((`date +%m`)) ] && [ $((daga)) -lt $((`date +%d`)) ]; then
  werk=1
elif [ $((jaara)) -eq $((`date +%Y`)) ] && [ $((maanda)) -eq $((`date +%m`)) ] && [ $((daga)) -eq $((`date +%d`)) ] && [ $((uura)) -lt $((`date +%H`)) ]; then
  werk=1
elif [ $((jaara)) -eq $((`date +%Y`)) ] && [ $((maanda)) -eq $((`date +%m`)) ] && [ $((daga)) -eq $((`date +%d`)) ] && [ $((uura)) -eq $((`date +%H`)) ] && [ $((minuuta)) -lt $((`date +%M`)) ]; then
  werk=1
fi





# ****************************************************************88
# wegschrijven update naar alarm of niet afhankelijk werk
# *****************************************************************8


if [ $((werk)) -eq 1 ]; then
  echo "$update" > /proc/acpi/alarm
fi
Waarschijnlijk kan het makkelijker, maar het werkt.

Offline Geurt Hakfoort

  • Lid
    • geurt-hakfoort
  • Steunpunt: Nee
hulp bij scriptje
« Reactie #9 Gepost op: 2008/03/29, 00:44:41 »
awk..... studeer je soms op het saxion?

ik ben daar helemaal dood gegooid met awk... ook al weer veel van vergeten trouwens.

Offline Thomas de Graaff

  • Lid
  • Steunpunt: Nee
hulp bij scriptje
« Reactie #10 Gepost op: 2008/03/29, 09:52:54 »
Hallo Geurt,
ik studeer psychologie. Ik heb dit scriptje nodig om mijn Mythbuntu machine dagelijks om 6:00 uur op te laten starten zodat tvgids gegevens kunnen worden gedownload. Daarnaast moet hij ook automatisch aangaan als er een tvprogramma moet worden opgenomen. In de bios kan je maar één tijd zetten, dus dit scriptje kijkt of er als eerste een programma moet worden opgenomen, danwel tvgidsgegevens moeten worden opgenomen, en schrijft dan de waaktijd weg voordat de computer automatisch uitgezet wordt. Zo staat deze computer niet de hele dag aan, en wordt alleen aangezet op momenten dat dat nodig is.

Offline Thomas de Graaff

  • Lid
  • Steunpunt: Nee
hulp bij scriptje
« Reactie #11 Gepost op: 2008/06/26, 21:48:12 »
Mocht er ooit nog iemand data willen vergelijken, met het commando
date --date="datumstring" +%skrijg je het aantal seconden van de datumstring te zien sinds 1970. Zo kan je dus zonder een gecompliceerd script data vergelijken.