Хранение и отображение дат в скрипте (bash)

325
Phil Rigby

В моем Linux (Ubuntu) у меня есть очень простой скрипт резервного копирования, по сути:

rsync <params> dir_src_a dir_dest_b rsync <params> dir_src_aa dir_dest_bb rsync <params> dir_src_aaa dir_dest_bbb 

Что я хотел бы сделать, перед каждым запуском rsync, сохранить текущую дату / время в переменной (очевидно, другую переменную для каждого rsync), а затем, когда завершится последний rsync, распечатать на экране что-то вроде:

rsync 1 started at startdate rsync 2 started at startdate rsync 3 started at startdate 

У меня нет навыков написания сценариев, поэтому любые рекомендации будут оценены. Скрипт в настоящее время находится только в стандартном bash и на Ubuntu 18.04, хотя сомневаюсь, что это важно. Спасибо!

1
Нулевые навыки написания сценариев, изучение сценариев: http://tldp.org/guides.html -> «Руководство по Bash для начинающих», а затем «Руководство по расширенному написанию сценариев» - по мере того, как вы поймете самые основы, вы будете создавать сценарии в кратчайшие сроки. Hannu 6 лет назад 0
У меня нет необходимости писать очень много сценариев. Это просто экономит время, поэтому мне не нужно запускать несколько разных, но похожих команд, когда я делаю резервные копии. Сказать мне «иди учиться писать» не очень помогает. Phil Rigby 6 лет назад 0
Это указатель ресурса, больше ничего. ;-) С небольшим усилием вы создадите свои собственные специальные сценарии. Hannu 6 лет назад 0

1 ответ на вопрос

0
xenoid

Смотрите dateкоманду. Вы можете поместить текущую дату / время в строку следующим образом:

now=$(date) 

Или ограничьте это только временем:

now=$(date +%H:%M:%S) 

В скрипте вы помещаете эти значения в массив:

#!/bin/bash  # declare array set -a times  # Loop over the directories for d in dir1 dir2 dir3 do # Add the current time at the end of the array times[${#times[*]}]=$(date +%H:%M:%S) # Perform rsync (replace next two by actual code) echo rsync $d sleep 2 done  # Loop over array of start times, "${!times[@]}" produces a 0-based sequence of indices over the array for i in "${!times[@]}";  do  # Print the time ( "$((i+1))" increments the number because unlike computers, humans counts from 1) printf "Rsync of dir #%s started at %s\n" "$((i+1))" "$" done 

Есть много вариантов форматирования даты. Если вы пойдете дальше в своем сценарии, наиболее полезным будет %sто, что он дает «секунды с начала эпохи», что очень полезно (и действительно является единственным безопасным способом) для вычисления длительностей.

Спасибо, это похоже на путь ... не заботясь о вычислении длительностей, я могу сделать это мысленно, посмотрев на времена. Как упомянул @KamilMaciorowski, шаги, необходимые для хранения / печати, были бы замечательными! Phil Rigby 6 лет назад 0

Похожие вопросы