Você pode fazer isso facilmente usando o comando source
para importar o conteúdo de outro arquivo para o ambiente shell atual (no seu caso, seu script) e executá-lo lá.
Em db.conf
:
username="username"
password="password"
database="database"
No seu script:
#!/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
Notas:
- Você nunca deve colocar um espaço após o operador de atribuição
=
ao atribuir variáveis de shell! - Eu fiz algumas coisas para limpar seu código. Eu não adicionei o novo despejo a um único arquivo tar como você estava fazendo. Eu mostrei como você pode compactar um arquivo individual. Se você quisesse usar o tar para que eles estivessem todos em um único arquivo, você pode fazer isso também, mas eu acho que ter arquivos de dump comprimidos individuais é bastante útil.
- Mudei a operação
cd
para antes do comandomysqldump
para que você não precise especificar o caminho para o arquivo de saída, pois esse é o diretório atual. Apenas salva código duplicado.
Editar: Mesmo com essa etapa concluída, parece que esta é uma solução incompleta para mim. Você pode estar interessado em como você pode passar valores usando argumentos. Por exemplo, você pode pegar o caminho codificado do arquivo de configuração do script acima e substituí-lo por:
#!/bin/sh
source "$1"
cd /home/sh
[...] # rest of script as above
Você poderia, então, executá-lo como ./mysqlbackup.sh /path/to/db.conf
. Você pode até dar um passo adiante e escrever tudo em um script e fornecer todos os três valores como argumentos:
#!/bin/sh
username="$1"
password="$2"
database="$3"
cd /home/sh
[...] # rest of script as above
... e chame como ./mysqlbackup.sh username password database
.