Вы можете легко сделать это, используя source
команду, чтобы импортировать содержимое другого файла в текущую среду оболочки (в вашем случае ваш скрипт) и запустить его там.
В db.conf
:
username="username"
password="password"
database="database"
В вашем скрипте:
#!/bin/sh
source /path/to/db.conf
cd /home/sh
dumpfile_name=$database-$(date +%d%m%Y).sql
mysqldump -u"$username" -p"$password" --opt "$database" > $dumpfile_name
gzip $dumpfile_name
Примечания:
- Вы никогда не должны ставить пробел после
=
оператора присваивания при назначении переменных оболочки!
- Я сделал пару вещей, чтобы очистить ваш код. Я не добавил новый дамп в один файл tar, как вы делали. Я показал, как вы можете сжать отдельный файл. Если вы хотите сделать так, чтобы они были в одном архиве, вы тоже можете это сделать, но я считаю, что иметь отдельные сжатые файлы дампа очень полезно.
- Я перенес
cd
операцию на перед mysqldump
командой, чтобы вам не пришлось указывать путь к выходному файлу, поскольку это текущий каталог. Просто сохраняет дублированный код.
Редактировать: Даже после того, как этот шаг сделан, кажется, что это наполовину испеченное решение для меня. Возможно, вас заинтересует, как вы можете передавать значения, используя аргументы. Например, вы можете взять жестко закодированный путь к файлу конфигурации из приведенного выше сценария и заменить его следующим:
#!/bin/sh
source "$1"
cd /home/sh
[...] # rest of script as above
Вы могли бы тогда выполнить это как ./mysqlbackup.sh /path/to/db.conf
. Вы могли бы сделать еще один шаг вперед и просто написать все в одном скрипте и указать все три значения в качестве аргументов:
#!/bin/sh
username="$1"
password="$2"
database="$3"
cd /home/sh
[...] # rest of script as above
... и назовите это как ./mysqlbackup.sh username password database
.