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

Här diskuterar vi skal, kommandon och klassiska linuxverktyg.
ubot
Inlägg: 4613
Blev medlem: 04 jan 2008, 14:03
OS: Ubuntu
Utgåva: 24.04 Noble Numbat LTS

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

Inlägg 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?
Senast redigerad av 1 ubot, redigerad totalt 3 gånger.
Lars
Inlägg: 6191
Blev medlem: 14 jan 2007, 19:31
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Ort: Stockholm

Re: Slumpa fram ett klockslag med date?

Inlägg 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))
gusse02
Inlägg: 258
Blev medlem: 16 maj 2008, 12:17
OS: Ubuntu
Utgåva: 20.04 Focal Fossa LTS

Re: Slumpa fram ett klockslag med date?

Inlägg 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!
ubot
Inlägg: 4613
Blev medlem: 04 jan 2008, 14:03
OS: Ubuntu
Utgåva: 24.04 Noble Numbat LTS

Re: Slumpa fram ett klockslag med date?

Inlägg 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.
Lars
Inlägg: 6191
Blev medlem: 14 jan 2007, 19:31
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Ort: Stockholm

Re: Slumpa fram ett klockslag med date?

Inlägg av Lars »

Du kan använda printf för att få dit nollan, typ printf %02d $TIMME
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: Slumpa fram ett klockslag med date?

Inlägg 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
Lars
Inlägg: 6191
Blev medlem: 14 jan 2007, 19:31
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Ort: Stockholm

Re: Slumpa fram ett klockslag med date?

Inlägg 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.
ubot
Inlägg: 4613
Blev medlem: 04 jan 2008, 14:03
OS: Ubuntu
Utgåva: 24.04 Noble Numbat LTS

Re: Slumpa fram ett klockslag med date?

Inlägg 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.
Skriv svar

Återgå till "Terminalforum"