В дополнение к проблеме, которую указал @Cyrus, вы неправильно используете массив sites. Вы на самом деле делаете две ошибки, которые (по иронии судьбы) в основном компенсируют друг друга. Во-первых, когда вы определяете массив с sites=("site1.ru site2.ru site3.ru")
, кавычки заставляют его создавать отдельный элемент массива, а не превращать каждый сайт в отдельный элемент. Затем, когда вы ссылаетесь на него с помощью ${sites[*]}
, [*]
заставляет его объединять все элементы вместе (разделенные пробелами) (или это было бы, если бы было более одного элемента), а затем отсутствовал двойных кавычек, что означает, что он разделяет результат по пробелам (а не между элементами массива) и расширяет любые символы подстановки и т. д.
Итоговый результат: вы не получаете никаких преимуществ от использования массива, и если у какого-либо из имен сайтов есть метасимволы оболочки, у вас будет ... неожиданное ... поведение. В этом случае это вряд ли вызовет проблемы (проблемные символы вообще запрещены в DNS в любом случае), но лучше научиться делать это правильно:
now="$(date +'%d_%m_%Y')"
path="/var/www/vitalii/backups"
sites=(site1.ru site2.ru site3.ru) # If any elements had spaces or other funny characters, you'd need to quote them INDIVIDUALLY
for i in "${sites[@]}" # Double-quotes and [@] make it treat each element as a "word", even if they contain funny characters
do
echo "$path/$i"
tar -cvzf "$path/${i}_${now}.tgz" "/var/www/vitalii/$i" # ${i}_ keeps it from treating "_" as part of the variable name
done
РЕДАКТИРОВАТЬ: как отметил @ G-Man в другом комментарии, использование двойных кавычек вокруг всех ссылок на переменные является хорошей идеей. Я исправил это выше ...