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ď č. 1Skú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