Sida 1 av 1

Slumpa fram ett klockslag med date? [LÖST]

Postat: 30 nov 2009, 19:24
av ubot
Jag behöver modifiera date så att det slumpar fram en tid. Det är bara klockslaget som ska slumpas fram, inte året, månaden eller veckan. Hur gör jag för att mha kommandot date slumpa fram ett klockslag under ett dygn? Det bästa kanske är att använda olika options på date och sedan helt enkelt slumpa fram ett tal mellan 00 och 23 och ett som spänner mellan 00 och 63 eller vad som nu gäller om jag ska slumpa fram ett klockslag. Vad säger ni?

Hur slumpar man bäst fram ett heltal i en intervall i ett skript?

Re: Slumpa fram ett klockslag med date?

Postat: 30 nov 2009, 22:39
av Lars
Det här slumpar fram ett klockslag som inträffar idag:

Kod: Markera allt

#!/bin/bash

SEKUNDER=$(echo $RANDOM*86400/32767 | bc)
MIDNATT=$(date -d 00:00 +%s)
date -d @$(($MIDNATT+$SEKUNDER))

Re: Slumpa fram ett klockslag med date?

Postat: 30 nov 2009, 22:55
av gusse02
Lars skrev:Det här slumpar fram ett klockslag som inträffar idag:

Kod: Markera allt

#!/bin/bash

SEKUNDER=$(echo $RANDOM*86400/32767 | bc)
MIDNATT=$(date -d 00:00 +%s)
date -d @$(($MIDNATT+$SEKUNDER))
Hmm .... Riktigt rätt kan det ju inte bli va? $RANDOM ger ett tal i intervallet [0..32767] men för att kunna få sekundnoggrannhet under ett dygn räcker ju inte det eftersom dygnet har 60*60*24 s = 86400 s. Men det kanske inte är viktigt?

För övrigt såg det ju riktigt snyggt ut!

Re: Slumpa fram ett klockslag med date?

Postat: 01 dec 2009, 02:40
av ubot
gusse02 skrev:
Lars skrev:Det här slumpar fram ett klockslag som inträffar idag:

Kod: Markera allt

#!/bin/bash

SEKUNDER=$(echo $RANDOM*86400/32767 | bc)
MIDNATT=$(date -d 00:00 +%s)
date -d @$(($MIDNATT+$SEKUNDER))
Hmm .... Riktigt rätt kan det ju inte bli va? $RANDOM ger ett tal i intervallet [0..32767] men för att kunna få sekundnoggrannhet under ett dygn räcker ju inte det eftersom dygnet har 60*60*24 s = 86400 s. Men det kanske inte är viktigt?

För övrigt såg det ju riktigt snyggt ut!
Tack för hjälpen. Du är på rätt spår. Jag kör med den här: $((RANDOM * 60 / 32768 )) för sekunder och $((RANDOM * 24 / 32768 )) för timmar osv. På något sätt måste jag nu lägga till en 0:a om timmen är mindre än 10, så att 7 blir 07 osv. I värsta fall får jag väl använda en vanlig if-sats. Jag behöver alltså bara plocka ut timmar, minuter och sekunder för sig, inte alla samtidigt.

Re: Slumpa fram ett klockslag med date?

Postat: 01 dec 2009, 09:59
av Lars
Du kan använda printf för att få dit nollan, typ printf %02d $TIMME

Re: Slumpa fram ett klockslag med date?

Postat: 01 dec 2009, 11:37
av Konservburk
ubot skrev:Jag behöver modifiera date så att det slumpar fram en tid.
Menar du modifiera som i att ändra källkoden?
Hur slumpar man bäst fram ett heltal i en intervall i ett skript?
Jag brukar använda $((RANDOM%a+b)), där a är intervallets storlek och b är det minsta talet:

Kod: Markera allt

a=3
b=5
echo $((RANDOM%a+b))

Det ger dig antingen 5, 6 eller 7.

Du kan skippa b helt om intervallet börjar vid 0 som för minuter eller timmar:

Kod: Markera allt

# ett slumptal mellan 0 och 23:
echo $((RANDOM%24))

# ett slumptal mellan 0 och 59:
echo $((RANDOM%60))
Tänk på att $RANDOM inte fungerar för slumptal större än 32767 och att det inte fungerar alls med vanlig sh, utan bara med bash, ksh, zsh och liknande.

Du kan få bättre slumptal från /dev/random

Re: Slumpa fram ett klockslag med date?

Postat: 01 dec 2009, 17:38
av Lars
gusse02 skrev:Hmm .... Riktigt rätt kan det ju inte bli va? $RANDOM ger ett tal i intervallet [0..32767] men för att kunna få sekundnoggrannhet under ett dygn räcker ju inte det eftersom dygnet har 60*60*24 s = 86400 s. Men det kanske inte är viktigt?
Det har du naturligtvis helt rätt i :-[ Men det är ju enkelt att multiplicera två $RANDOM med varandra för att skapa ett större tal.

Re: Slumpa fram ett klockslag med date?

Postat: 03 jan 2010, 11:53
av ubot
Nej, min rad löste problemet. Jag behöver inte slumpa fram en tid med mer noggrannhet än mer än timme och minut och då räcker raden jag hade.