Я пишу сценарий журнала резервного копирования и имею 2 переменные в эхо, но все еще не работает.
Моя команда:
echo "Размер базы данных $ (du -hs / backup / db / db _ $ (date +% F) .sql" >> /backup/backup.log
В моем операторе echo у меня есть командная переменная, в командной переменной - другая переменная. Что мне нужно изменить. Я благодарен за любую помощь.
с уважением
черная борода
иметь 2 переменные в эхо
На самом деле нет.
Переменные заключены в кудрявый подтяжки:
NAME=Fred
echo ${NAME}"
Что у вас есть вызовы команд. Все, что находится внутри разделителей «$ (» и «)», выполняется как отдельная команда, и вывод этой команды «возвращается» в результате вызова:
echo "$( pwd )"
Я думаю, вы намерены создать путь к файлу на основе текущей даты, а затем передать этот путь к файлу в команду du. Итак, пошагово:
Ваш путь к файлу:
/backup/db/db_$(date +%F).sql
В этом сгенерированном значении не может быть пробелов (% F возвращает ГГГГ-ММ-ДД), поэтому нам не нужно беспокоиться о цитировании пути к файлу.
"Вставка" в вызов du:
du -hs /backup/db/db_$(date +%F).sql
наконец, вызывая это в команде echo "верхнего уровня":
echo "DB-Size $(du -hs /backup/db/db_$(date +%F).sql)" >> /backup/backup.log
Обратите внимание на размещение фигурных скобок - «$ (» начинает вызов, «)» завершает его. Вы вызываете два команды, поэтому вам нужно два закрытие ')' s.
Также обратите внимание, что здесь меньше кавычек - одна для начала строкового значения, а другая для его завершения. Поскольку это двойные кавычки, оболочка расширит все биты внутри нее, включая переменные и вызовы команд - если они были не замужем кавычки, он бы этого не сделал, рассматривая все это как строковый литерал.
echo "DB-Size" $ (du -hs / backup / db / db "$ (date +% OF)". sql "" >> /backup/backup.log
с добавлением «$» для каждой переменной решает проблему.