2016-03-09 6 views
0

Мне нужен скрипт Bash для генерации автоматических тегов в файле.tag. Когда скрипт вызывается несколько раз в тот же день, счетчик должен быть increased.The СЧЕТЧИК должен быть сброшен обратно на 001, когда дата имеет changed.Thanksdate & counter bash script

Я пытался

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

Удачи с этим. – 123

+0

'#!/Bin/Баш сенсорный file.tag счетчик = 0 дата = $ (дата + "% г.% М.% D") эхо дата $. $ Счетчик> file.tag' – d0pchu

+0

и сейчас im здесь, и я не могу переместить – d0pchu

ответ

1

Попробуйте это :

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

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

printf '%s.%03d\n' ${dt} ${counter} >> file.tag 

Этот сценарий:

  • подсчитывает количество встречаемости с текущей датой в file.tag
  • приращений этого счетчик
  • добавляет дату и счетчик file.tag

Если дата, если не соответствует, grep -c возвратит 0, начиная еще один день с 001

0

Я заметил в вашем примере, что file.tag всегда имеет только одну строку: последний тег, правильно?

Дайте эту версию попробовать (протестировано и проверено с 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 "%s\n" "${date}.${counter}" > file.tag 

скрипт проверяет, если file.tag не пусто.

Если не пуст, он извлекает последнюю дату из файла file.tag и сравнивает ее с текущей датой.

Если даты равны, то он извлекает последнее значение счетчика из file.tag и увеличения его

, наконец он обновляет file.tag с новым тегом