/ / date & counter bash skript - bash, slučky, dátum, počet

dátum a čítačka bash skript - bash, slučky, dátum, počet

Potrebujem skript Bash na generovanie automatických značiek vfile.tag. Keď sa skript spustí niekoľkokrát v ten istý deň, musí sa COUNTER zvýšiť. COUNTER musí byť obnovený na 001, keď sa dátum zmenil.

skúsil som

#!/bin/bash
touch file.tag
counter=0
date=$(date +"%y.%m.%d")
echo $date.$counter > file.tag

odpovede:

1 pre odpoveď č. 1

Skúste to :

[[ ! -f ./file.tag ]] && touch file.tag

declare -i counter
dt=$(date +"%y.%m.%d")
counter=$(grep -c "${dt}" file.tag)
(( counter++ ))

printf "%s.%03dn" ${dt} ${counter} >> file.tag

Tento skript:

  • počítá počet výskytov aktuálneho dátumu v súbore file.tag
  • zvyšuje toto počítadlo
  • pridá dátum a počítadlo súboru tag

Ak dátum, ak nie je zhodný, grep -c vráti 0, začína ďalší deň 001


0 pre odpoveď č. 2

Všimol som si, že file.tag má vždy len jeden riadok: posledný tag, nie?

Dajte túto verziu vyskúšať (testované a kontrolované pomocou shellcheck):

#!/bin/bash

touch file.tag
date=$(date +"%y.%m.%d")
counter=0
if [ -s file.tag ]
then
lastline=$(tail -1 file.tag)
if [ "${date}" = "$(expr "${lastline}" : "^([0-9.][0-9.]*)[.][0-9][0-9]*$")" ]
then
counter=$(expr "${lastline}" : "^[0-9.][0-9.]*[.]([0-9][0-9]*)$")
counter=$((counter + 1))
fi
fi
printf "%sn" "${date}.${counter}" > file.tag

Skript kontroluje, či súbor.tag nie je prázdny.

Ak nie je prázdny, extrahuje posledný dátum z file.tag a porovná ho s aktuálnym dátumom.

Ak sú dátumy rovnaké, potom vyberie poslednú hodnotu počítadla z file.tag a zvýši ju

v konečnom dôsledku aktualizuje file.tag s novou značkou