У вас там разные проблемы.
Сначала вы хотите присвоить результат даты команды date +%b-%d-%y
переменной TESTDATE
. Для этого вам нужно использовать подстановку команд :
TESTDATE=$(date +%b-%d-%y)
В настоящее время ваш скрипт выполняет присвоение строковой date +%b-%d-%y
TESTDATE
, а не результату команды. Вы можете проверить, запустив это:
TESTDATE="date +%b-%d-%y"
echo $TESTDATE
который напечатает date +%b-%d-%y
.
Во-вторых, вы используете подстановку команд, где вы не должны, то, что вы хотите:
zipfile="${DEST}/${TESTDATE} ${d} ${BASENAME}.zip"
Итак, вам не нужны скобки. Я также понятия не имею, что вы пытаетесь сделать с basename
там. basename
- это программа по умолчанию, и вам не нужно помещать ее в переменную, чтобы использовать ее. Приведенная выше команда устанавливает zipfile в /volume1/NetBackup/Backup/${TESTDATE} ${d} /usr/bin/basename
которое не является допустимым именем файла. Если вы объясните, что вы пытаетесь сделать с базовым именем, я мог бы помочь, но это не имеет смысла.
Вы, кажется, думаете, что DIRS
- это список, это не так, это всего лишь один каталог /volume1/NetBackup
.
Другой момент - это вопрос стиля. Вы всегда должны избегать использования имен переменных CAPITAL, поскольку все переменные окружения являются заглавными, и это может привести к проблемам, если вы используете одно и то же имя.
В любом случае, если я понимаю, что вы пытаетесь сделать здесь, вы могли бы написать скрипт следующим образом (я сделал dirs
в массив, так как думаю, что это то, что вы хотели):
#!/usr/bin/env bash
# date
testdate=$(date +%b-%d-%y)
# dirs to backup
dirs=("/volume1/NetBackup" "/volume1/foobar")
# Save zip file elsewhere on the server
dest="/volume1/NetBackup/Backup"
# set to "no" keep old zip file and add new file
delete_old_zip_files="no"
#Path to binary files
zip=/usr/syno/bin/zip
base=$(/usr/bin/basename ${dest})
echo "bb $base";
for d in ${dirs[@]}
do
## I assume this is what you wanted to do, it will just
## return the name of the current $d directory
base=$(/usr/bin/basename ${d})
zipfile="${dest}/${testdate} ${base}.zip"
echo -n "Creating $d $zipfile..."
# create zip file
${zip} -r $zipfile $d && echo "Done!" || echo ""
done
В приведенном выше примере сценария можно создать /volume1/NetBackup/Backup/Mar-05-14 NetBackup.zip
и /volume1/NetBackup/Backup/Mar-05-14 foobar.zip
. Кстати, я бы также настоятельно рекомендовал вам не создавать имена файлов с пробелами, вы будете мне благодарны позже.