Script: Computer tijd, verschil tussen start- en eindtijd

Alles over programmeren in Linux
Gebruikersavatar
Mogenblue
Held
Held
Berichten: 351
Lid geworden op: Wo 18 Okt 2017, 08:27
Locatie: Amsterdam

Script: Computer tijd, verschil tussen start- en eindtijd

Berichtdoor Mogenblue » Za 22 Mei 2021, 21:15

Soms wil je wel eens weten hoe lang een bepaald proces heeft geduurd. Op zich is het vrij makkelijk om de datum en tijd te laten afdrukken, maar als je het er wat netter uit wil laten zien komt er iets meer bij kijken. Het verschil zit in de details. En voor die details hebben we internet om uit te zoeken hoe dat precies moet.

In dit script wordt een aantal voorbeelden gegeven van datum en tijdnotatie. Ook zit er een berekening in van het verschil tussen start- en eindtijd van een proces. Met enig knip- en plakwerk kun je dit in je eigen scripts overzetten waar je daar behoefte aan hebt.

Er wordt gebruik gemaakt van logging naar een bestand. Dit wordt in je home directory geplaatst. In het script is dat /home/mogenblue. Daar moet je natuurlijk je eigen username voor in de plaats zetten.

Het script heet computer-time.sh en dit staat er in:

Code: Selecteer alles

#!/bin/bash

# datum en tijd weergave met verschil in milliseconden
# uitvoer wordt naar bestand geschreven

LogFile='/home/mogenblue/log-time.txt'

#--------------------------------------------------------------------

echo .
echo .
echo .
echo .

echo . > $LogFile
echo 'Datum en tijd weergave met verschil in milliseconden' >> $LogFile
echo . >> $LogFile


echo . >> $LogFile
echo 'Datum en tijd notaties' >> $LogFile
echo . >> $LogFile
Datum=$(date +%d/%m/%Y_%H:%M:%S,%N) ; Datum=${Datum:0:23}
echo 'Datum=$(date +%d/%m/%Y_%H:%M:%S,%N) ; Datum=${Datum:0:23}' >> $LogFile
echo "$Datum" >> $LogFile

echo . >> $LogFile
Tijd=${Datum:11:12}
echo 'Tijd=${Datum:11:12}' >> $LogFile
echo "$Tijd" >> $LogFile

echo . >> $LogFile
Tijd=$(date +%d/%m/%Y_%H:%M:%S,%N) ; Tijd=${Tijd:11:12}
echo 'Tijd=$(date +%d/%m/%Y_%H:%M:%S,%N) ; Tijd=${Tijd:11:12}' >> $LogFile
echo "$Tijd" >> $LogFile
echo . >> $LogFile


echo . >> $LogFile
echo 'Bereken tijdverschil' >> $LogFile

# functie timestamp '2020-01-01 12:20:45.12345' => 1577899245123450000
timestamp() {
date '+%s%N' --date="$1"
}

stime=$(date +%H:%M:%S,%N)
# simuleer een proces dat 1 seconde duurt
sleep 1
etime=$(date +%H:%M:%S,%N)

dtime=$(( $(timestamp "$etime") - $(timestamp "$stime") )) # bereken verschil
dtime=$(echo "scale=3; $dtime / 1000000000" | bc) # afronden op 3 decimalen
dtime=$(echo ${dtime/./,}) # verwissel lokale decimale punt naar komma
printf -v dtime "%-0.3f" $dtime # plaats een nul voor waarden kleiner dan 1 seconde (,531 wordt 0,531)

echo "etime is $etime" >> $LogFile
echo "stime is $stime" >> $LogFile
echo "dtime is $dtime" >> $LogFile
echo . >> $LogFile


echo . >> $LogFile
echo 'Voorbeeld Berekening tijdverschil bij synchroniseren' >> $LogFile
echo . >> $LogFile

Datum=$(date +%Y/%m/%d_%H:%M:%S,%N) ; Datum=${Datum:0:23} ; sTijd=${Datum:11:12}
echo "$Datum: Synchroniseren over ssh, downloaden ..." >> $LogFile
# simuleer synchroniseren over ssh, downloaden
sleep 2

# synchronisatie voltooid
Datum=$(date +%Y/%m/%d_%H:%M:%S,%N) ; Datum=${Datum:0:23} ; vTijd=${Datum:11:12}
echo "$Datum: Synchronisatie downloaden voltooid." >> $LogFile
echo "." >> $LogFile

dtime=$(( $(timestamp "$vTijd") - $(timestamp "$sTijd") )) # bereken verschil
dtime=$(echo "scale=3; $dtime / 1000000000" | bc) # afronden op 3 decimalen
dtime=$(echo ${dtime/./,}) # verwissel lokale decimale punt naar komma
printf -v dtime "%-0.3f" $dtime # plaats een nul voor waarden kleiner dan 1 seconde (,531 wordt 0,531)

echo "vTijd is $vTijd" >> $LogFile
echo "sTijd is $sTijd" >> $LogFile
echo "Voltooid in $dtime s" >> $LogFile
echo "Synchronisatie voltooid in $dtime s" >> $LogFile
echo . >> $LogFile
Dit bestand moet natuurlijk uitvoerbaar worden gemaakt voor je het kan gebruiken.
Gebruikersavatar
Mogenblue
Held
Held
Berichten: 351
Lid geworden op: Wo 18 Okt 2017, 08:27
Locatie: Amsterdam

Re: Script: Computer tijd, verschil tussen start- en eindtijd

Berichtdoor Mogenblue » Zo 23 Mei 2021, 10:19

Je kunt de berekening voor het tijdverschil ook helemaal in een functie zetten. Dat is makkelijk als je meerdere verschillen wil berekenen.

Dit is het script: tijdverschil.sh

Code: Selecteer alles

#!/bin/bash

# functie voor berekening tijdverschil in seconden, op milliseconden nauwkeurig

#------------------------------------------------------------------------------

echo .
echo .
echo .
echo .

echo 'Functie tijdverschil'
echo .

# de functie moet gedeclareerd worden voordat je hem kan gebruiken

# functie tijdverschil
# invoer is starttijd en eindtijd
# uitvoer is tijdverschil in seconden plus milliseconden
# functie tijdverschil '12:54:42,313648710' '12:54:43,319022259' => 1,005
tijdverschil() {

local TimeD=0

TimeD=$(( $(date '+%s%N' --date="$2") - $(date '+%s%N' --date="$1") )) # bereken verschil in nanoseconden

TimeD=$(echo "scale=3; $TimeD / 1000000000" | bc) # afronden op 3 decimalen
TimeD=$(echo ${TimeD/./,}) # verwissel lokale decimaal scheider van punt naar komma
printf -v TimeD "%-0.3f" $TimeD # plaats een nul voor waarden kleiner dan 1 seconde (,531 wordt 0,531) en rond af op 3 decimalen

echo $TimeD

}

#------------------------------------------------------------------------------


echo 'Voorbeeld tijdverschil'
echo .

# set starttijd
stime=$(date +%H:%M:%S,%N)
# simuleer een proces dat 1 seconde duurt
sleep 1
# set eindtijd
etime=$(date +%H:%M:%S,%N)

# bereken verschil
vtime=$(tijdverschil "$stime" "$etime")

# toon resultaat
echo "etime is $etime"
echo "stime is $stime"
echo "vtime is $vtime"
echo .
Het bestand moet uitvoerbaar worden gemaakt voor je het kan gebruiken.


Referenties:
Bash Functions
Gebruikersavatar
Mogenblue
Held
Held
Berichten: 351
Lid geworden op: Wo 18 Okt 2017, 08:27
Locatie: Amsterdam

Re: Script: Computer tijd, verschil tussen start- en eindtijd

Berichtdoor Mogenblue » Zo 23 Mei 2021, 15:40

Voorbeeld tijdverschil met een loop. De loop wordt 10 keer doorlopen.

tijdverschil.sh

Code: Selecteer alles

#!/bin/bash

# functie voor berekening tijdverschil in seconden, op milliseconden nauwkeurig

#------------------------------------------------------------------------------

echo .
echo .
echo .
echo .

echo 'Functie tijdverschil'
echo .

# de functie moet gedeclareerd worden voordat je hem kan gebruiken

# functie tijdverschil starttijd eindtijd
# uitvoer is tijdverschil in seconden
# functie tijdverschil '12:54:42,313648710' '12:54:43,319022259' => 1,005
tijdverschil() {

#local TimeD=0

local TimeD=$(( $(date '+%s%N' --date="$2") - $(date '+%s%N' --date="$1") )) # bereken verschil in nanoseconden

TimeD=$(echo "scale=3; $TimeD / 1000000000" | bc) # afronden op 3 decimalen
TimeD=$(echo ${TimeD/./,}) # verwissel lokale decimaal scheider van punt naar komma
printf -v TimeD "%-0.3f" $TimeD # plaats een nul voor waarden kleiner dan 1 seconde (,531 wordt 0,531) en rond af op 3 decimalen

echo $TimeD

}

#------------------------------------------------------------------------------


echo 'Voorbeeld tijdverschil met een loop'
echo .

# set starttijd
stime=$(date +%H:%M:%S,%N)

for (( a=0; a<10; a++ ))
do

# simuleer een proces dat 1 seconde duurt
sleep 1
# set eindtijd
etime=$(date +%H:%M:%S,%N)

# bereken verschil
vtime=$(tijdverschil "$stime" "$etime")

# toon resultaat
echo "etime is $etime"
echo "stime is $stime"
echo "vtime is $vtime"
echo .
echo .

done

Terug naar “Programmeren”

Wie is er online

Gebruikers op dit forum: Geen geregistreerde gebruikers en 4 gasten