Posso criar um arquivo de configuração para um script de shell?

0

É possível criar um .sh concha ou .command arquivo com um arquivo de configuração?

Eu preciso fazer backup de sites via Terminal e poder colocar alguns dados em arquivos de configuração, e faça o shell executá-lo.

Por exemplo, o nome de usuário, senha, ssh id, et cetera.

#!/bin/bash
ssh [email protected] "tar cjvf webfilesbackup-date-`date +%Y%m%d`.tar.bz2 public_html/"    
ssh [email protected] "mysqldump -u user_admin -ppass database_1 > databasebackup-`date +%Y%m%d`-db.sql"
scp [email protected]:webfilesbackup-date-`date +%Y%m%d`.tar.bz2 ~/backup/
scp [email protected]:databasebackup-`date +%Y%m%d`-db.sql ~/backup/
ssh [email protected] "rm -f webfilesbackup-date-`date +%Y%m%d`.tar.bz2"
ssh [email protected] "rm -f databasebackup-`date +%Y%m%d`-db.sql"
macman
fonte

Respostas:

5

Crie um arquivo (por exemplo, settings ) com suas configurações como variáveis:

username='foo'
pass='bar'
website='baz'
database='yak'

Em seguida, fonte o arquivo do seu script e você será capaz de acessar as variáveis:

. settings
echo $username     # <- this will print "foo"

Quanto à sua segunda "pergunta", se você tiver vários hosts, poderá ter vários arquivos de configuração e obter o que foi passado como argumento para o seu script. Por exemplo, crie um arquivo de configuração chamado site1.

Ligue para o seu script com ./backup.sh site1

. $1               # <- this will load the file "site1"
echo $username     # <- this will print "foo"

Com o seu script de backup, isso significaria:

#!/bin/bash
. $1
ssh [email protected] "tar cjvf webfilesbackup-date-`date +%Y%m%d`.tar.bz2 public_html/"
ssh [email protected] "mysqldump -u $user -p$pass $database > databasebackup-`date +%Y%m%d`-db.sql"
# ... and so on
WakiMiko
fonte
3
Eu não adicionaria ".sh", pois não é para ser executado.
Ignacio Vazquez-Abrams
Se aberto Terminal.app e escrever algo como este backup -site1 eu tenho muitas consultas no arquivo de configuração (site2, site3) com diferente (ssh, pass) é possível?
macman
@macman -site1 seria um argumento para o seu script de shell. Se você postar o shell script em sua pergunta, seria mais fácil responder.
slhck
aqui está um diagrama de imagem Imgur
macman
-site1 talvez o parâmetro
macman
0

A outra opção é apenas criar um arquivo de texto e usar um loop while para acessar o arquivo linha por linha.

Matthew Dudak
fonte
talvez funcione? {scp $ user: webfilesbackup-date-date +% Y% m% d.tar.bz2 ~ / backup /} no arquivo de configuração & gt; O arquivo de configuração {$ user = '[email protected]'} é. site.sh como adicionar este parâmetro ao .command para passar o backup do arquivo de configuração -site1
macman
0
mkdir -p Example.app/Contents/MacOS`
cp script.sh Example.app/Contents/MacOS/Example

... e isso vai funcionar. Este artigo tem instruções mais detalhadas, incluindo como obter ícones personalizados.

Você também pode procurar o Automator ou o AppleScript Studio como maneiras de criar aplicativos que possam ser executados sem problemas, sem precisar executá-lo manualmente.

Daniel Pittman
fonte
sim, mas, eu pesquisando solução para escrever manualmente "backup-s1" para o terminal
macman
0
     # parse the ini like $0.hostname.conf and set the variables
     # place a $0.`hostname -s`.conf file in the same dir as your script
     # set here any VarName=VarValue
     # use ; for comments - you will get host independant conf file 
     # for your bash scripts - [examle usage :][1] 
     doParseIniFile(){
        eval `sed -e 's/[[:space:]]*\=[[:space:]]*/=/g' \
            -e 's/;.*$//' \
            -e 's/[[:space:]]*$//' \
            -e 's/^[[:space:]]*//' \
            -e "s/^\(.*\)=\([^\"']*\)$/\1=\"\2\"/" \
           < $IniFile \
            | sed -n -e "/^\[$IniSection\]/,/^\s*\[/{/^[^;].*\=.*/p;}"`
     }
     #eof function doParseIniFile
Yordan Georgiev
fonte
Você se importaria em expandir sua resposta somente de código para explicar o que ela faz?
slhck