shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Integração com mySQL


From: Tiago Barcellos Peczenyj
Subject: Re: [shell-script] Integração com mySQL
Date: Thu, 14 Jun 2007 15:40:31 -0300

Nogueira,

Quando tiver scripts muito grandes, procure colocar também em algum
site/blog/wiki.

O pastebin ( http://pastebin.com/ ) possui syntax highlyght e permite que vc
divulgue de forma mais fácil o seu script. Por exemplo, aqui no Gmail eu
estou vendo as linhas maiores distorcidas.

[]´s Tiago

On 6/14/07, nogueira_jr <address@hidden> wrote:
>
>   Amigos:
>
> Usando a experiência do Julio C. Neves e do canivete suiço do Aurélio.Net,
>
> escrevi as seguintes rotinas (sujeitas a 100% de alteração por quem achar
> necessário - mas postem aqui, porque quero aprender mais):
>
> Arquivo (1): cria_sys.sh (cria um database TESTE usando o arquivo (2)
> cria_sys.sql) Depois chama a rotina (3) cria_sys1.sh que vai criar a
> tabela
> PRODUTOS e colocar alguns itens lá dentro.
>
> Arquivo (4): destroi_sys.sh (que apaga as tabelas e o database criados no
> arquivo acima)
>
> Basico: Ter o mySQL instalado e com o ROOT definido.
>
> Arquivo (1)-----------------------:
> #!/bin/bash
> clear
> modo=t
> read -p "Modo [g]ráfico ou modo [t]exto ? : " modo
> [ "$modo" ] || modo=t
> if [ $modo -ne "t" ]; then
> modo=g
> fi
>
> echo ==================================================================
> echo Sistema de implantação de banco de dados mySQL
> echo ----------------------------------------------------------
> echo ================================================================== >
> mc2_db.log
> echo Sistema de implantação de banco de dados mySQL >> mc2_db.log
> echo ---------------------------------------------------------- >>
> mc2_db.log
>
> # ======================= variaveis pré-fixadas:
> nome_root=root
> nome_db=teste # DEVE ser alterado cfme sistema !!!
> senha_root=
> deu_erro=1 #0=nao 1=sim
> # ...aqui outras
> # ==============================================
>
> while true; do
> echo Somente o ROOT pode usar esta rotina.
> echo
> if [ $modo = "g" ]; then
> nome_root=$( dialog --stdout --inputbox 'Digite seu nome:' 0 0 $nome_root
> )
> [ "$nome_root" ] || nome_root=root # verifica se não deu o nome
> senha_root=$( dialog --stdout --title 'Senha de acesso' --insecure
> \
> --passwordbox 'Por favor, confirme a senha do root:' 0 0 )
> else
> read -p "Informe o nome do ROOT [ $nome_root ]: " nome_root
> [ "$nome_root" ] || nome_root=root # verifica se não deu o nome
> read -p "Senha do ROOT (não será mostrada na tela): " -s senha_root
> [ "$senha_root" ] || break # verifica se não deu a senha
> fi
> # senha errada
> mysql -u $nome_root -p$senha_root -e " " >> mc2_db.log
> if [ $? -ne 0 ]; then
> echo
> echo ERRO de acesso ao mySQL [nome e/ou senha]
> echo ERRO de acesso ao mySQL [nome e/ou senha] >> mc2_db.log
> break
> fi
>
> clear
> echo ==================================================================
> echo Sistema de implantação de banco de dados mySQL
> echo ----------------------------------------------------------
>
> if [ $modo = "g" ]; then #modo grafico
> dialog \
> --title 'INSTALANDO O SISTEMA' \
> --msgbox 'Criando database principal' \
> 0 0
>
> dialog \
> --title 'INSTALANDO O SISTEMA' \
> --msgbox 'Criando tabela: PRODUTOS' \
> 0 0
>
> else #modo texto
> echo INSTALANDO SISTEMA
> echo Criando database principal $nome_db
> mysql -u $nome_root -p$senha_root -e "create database if not exists
> $nome_db;" >> mc2_db.log
> # verificar retorno, se erro...
> if [ $? -ne 0 ]; then
> echo
> echo ERRO na criação do database...
> echo ERRO na criação do database... >> mc2_db.log
> break
> fi
>
> # Agora chama mySQL usando arquivo de lote cria_sys.sql e gravando log em
> mc2_db.log:
> echo Criando as tabelas e preenchendo com conteúdo default...
> echo " Tabela PRODUTOS (cria_sys1.sql)"
> mysql -u $nome_root -p$senha_root $nome_db -t -vvv < cria_sys1.sql >>
> mc2_db.log
> if [ $? -ne 0 ]; then
> echo
> echo ERRO na criação da tabela PRODUTOS...
> echo ERRO na criação da tabela PRODUTOS... >> mc2_db.log
> break
> fi
> fi
>
> deu_erro=0
> break
> done
> echo
> echo ==================================================================
> echo ================================================================== >>
>
> mc2_db.log
> if [ $deu_erro -eq 1 ]; then
> echo Processo de implantação NÃO encerrado corretamente!!!
> echo " ==="
> echo Verifique o arquivo de log: mc2_db.log
> echo Processo de implantação NÃO encerrado corretamente!!! >> mc2_db.log
> else
> echo Processo de implantação encerrado corretamente. Parabens!!!
> echo Processo de implantação encerrado corretamente. Parabens!!! >>
> mc2_db.log
> fi
> echo Bye...
> echo
>
> Arquivo (2)-----------------------:
> -- cria_sys.sql
> -- rotina que cria todas as tabelas do banco de dados master (database)
> para
> mySQL em modo batch
> --
>
> -- =============== cria as tabelas (se não existirem):
>
> -- 1a: tabela produtos:
> CREATE TABLE IF NOT EXISTS produtos (
> codigo DOUBLE(13,0) UNSIGNED,
> descricao VARCHAR(40),
> estoque INTEGER UNSIGNED DEFAULT 0,
> preco DECIMAL(10,2) DEFAULT 0.00,
> PRIMARY KEY (codigo)
> );
> -- da direitos para um usuario: usernome, na tabela acima
> -- GRANT select,insert,update,delete ON produtos TO 'usernome'@'localhost'
>
> -- identified by 'usersenha';
> -- FLUSH PRIVILEGES;
>
> -- Se todas as tabelas começarem com um prefixo comum, pode-se dar
> -- direitos globais:
> -- GRANT select,insert,update,delete ON pref*.* TO 'usernome'@'localhost'
> -- identified by 'usersenha';
> -- FLUSH PRIVILEGES;
>
> -- Outra opção (e melhor) é dar previlégios de acesso a um grupo:
> -- GRANT select,insert,update,delete ON pref*.*|produtos TO GROUP
> meugrupo;
> -- FLUSH PRIVILEGES;
>
> -- 1b: preenche tabela produtos (IGNORE pula registros duplicados):
> INSERT IGNORE INTO produtos VALUES
> (1234567890123, "produtos certo", 100, 1.99),
> (2345678901231, "produto errado", 110, 2.99),
> (3456789012312, "produtos nao sei", 2100, 51.00),
> (4567890123123, "produto ruim", 130, 2.00),
> (5678901231234, "produtos bom", 1, 12.66),
> (6789012312345, "produtos mais", 0, 41.00),
> (7890123123456, "produtos menos", 710, 51.87),
> (8901231234567, "produtos talvez", 330, 21.29),
> (9012312345678, "produto oito", 830, 3821.00)
> ;
> -- select codigo, descricao, estoque, LPAD(FORMAT(preco,2),20," ") AS
> -- "preco de venda R$" from produtos;
>
> -- 2a: proxima tabela:
> -- 2b: dados desta tabela
>
> Arquivo (3)-----------------------:
> -- cria_sys1.sql
>
> -- tabela produtos:
> CREATE TABLE IF NOT EXISTS produtos (
> codigo DOUBLE(13,0) UNSIGNED,
> descricao VARCHAR(40),
> estoque INTEGER UNSIGNED DEFAULT 0,
> preco DECIMAL(10,2) DEFAULT 0.00,
> PRIMARY KEY (codigo)
> );
> -- da direitos para um usuario: usernome, na tabela acima
> -- GRANT select,insert,update,delete ON produtos TO 'usernome'@'localhost'
>
> -- identified by 'usersenha';
> -- FLUSH PRIVILEGES;
>
> -- Se todas as tabelas começarem com um prefixo comum, pode-se dar
> -- direitos globais:
> -- GRANT select,insert,update,delete ON pref*.* TO 'usernome'@'localhost'
> -- identified by 'usersenha';
> -- FLUSH PRIVILEGES;
>
> -- Outra opção (e melhor) é dar previlégios de acesso a um grupo:
> -- GRANT select,insert,update,delete ON pref*.*|produtos TO GROUP
> meugrupo;
> -- FLUSH PRIVILEGES;
>
> -- 1b: preenche tabela produtos (IGNORE pula registros duplicados):
> INSERT IGNORE INTO produtos VALUES
> (1234567890123, "produtos certo", 100, 1.99),
> (2345678901231, "produto errado", 110, 2.99),
> (3456789012312, "produtos nao sei", 2100, 51.00),
> (4567890123123, "produto ruim", 130, 2.00),
> (5678901231234, "produtos bom", 1, 12.66),
> (6789012312345, "produtos mais", 0, 41.00),
> (7890123123456, "produtos menos", 710, 51.87),
> (8901231234567, "produtos talvez", 330, 21.29),
> (9012312345678, "produto oito", 830, 3821.00)
> ;
> -- select codigo, descricao, estoque, LPAD(FORMAT(preco,2),20," ") AS
> -- "preco de venda R$" from produtos;
>
> -- Use cria_sys2.sql, cris_sys3.sql e assim em diante para as demais
> tabelas.
>
> Arquivo (4)-----------------------:
> #!/bin/bash
> clear
> echo ==================================================================
> echo Sistema de implantação de banco de dados mySQL
> echo Rotina para destruir sistema implantado: database e tabelas
> echo ----------------------------------------------------------
> echo ================================================================== >
> mc2_db.log
> echo Sistema de implantação de banco de dados mySQL >> mc2_db.log
> echo Rotina para destruir sistema implantado: database e tabelas >>
> mc2_db.log
> echo ---------------------------------------------------------- >>
> mc2_db.log
>
> # ======================= variaveis pré-fixadas:
> nome_root=root
> nome_db=teste # DEVE ser alterado cfme sistema !!!
> senha_root=
> deu_erro=1 #0=nao 1=sim
> # ...aqui outras
> # ==============================================
>
> while true; do
> echo Somente o ROOT pode usar esta rotina.
> echo
> read -p "Informe o nome do ROOT [ $nome_root ]: " nome_root
> [ "$nome_root" ] || nome_root=root # verifica se não deu o nome
> read -p "Senha do ROOT (não será mostrada na tela): " -s senha_root
> [ "$senha_root" ] || break # verifica se não deu a senha
> # senha errada
> mysql -u $nome_root -p$senha_root -e " " >> mc2_db.log
> if [ $? -ne 0 ]; then
> echo
> echo ERRO de acesso ao mySQL [nome e/ou senha]
> echo ERRO de acesso ao mySQL [nome e/ou senha] >> mc2_db.log
> break
> fi
>
> clear
> echo ==================================================================
> echo Sistema de implantação de banco de dados mySQL
> echo Rotina para destruir sistema implantado: database e tabelas
> echo ----------------------------------------------------------
>
> echo DESTRUINDO SISTEMA
>
> mysql -u $nome_root -p$senha_root $nome_db -vvv -e "USE $nome_db;" >>
> mc2_db.log
> if [ $? -ne 0 ]; then
> echo
> echo ERRO de abertura do database $nome_db...
> echo ERRO de abertura do database $nome_db... >> mc2_db.log
> break
> fi
>
> echo
> echo Apagando tabela PRODUTOS
> mysql -u $nome_root -p$senha_root $nome_db -vvv -e "DROP TABLE produtos;"
> >> mc2_db.log
> if [ $? -ne 0 ]; then
> echo
> echo ERRO na destruição da tabela PRODUTOS...
> echo ERRO na destruição da tabela PRODUTOS... >> mc2_db.log
> break
> fi
>
> # outras tables aqui
>
> echo Apagando database principal $nome_db
> mysql -u $nome_root -p$senha_root $nome_db -vvv -e "DROP DATABASE
> $nome_db;" >> mc2_db.log
> # verificar retorno, se erro...
> if [ $? -ne 0 ]; then
> echo
> echo ERRO na destruição do database...
> echo ERRO na destruição do database... >> mc2_db.log
> break
> fi
>
> deu_erro=0
> break
> done
> echo
> echo ==================================================================
> echo ================================================================== >>
>
> mc2_db.log
> if [ $deu_erro -eq 1 ]; then
> echo Processo de destruição NÃO encerrado corretamente!!!
> echo " ==="
> echo Verifique o arquivo de log: mc2_db.log
> echo Processo de destruição NÃO encerrado corretamente!!! >> mc2_db.log
> else
> echo Processo de destruição encerrado corretamente. Parabens!!!
> echo Processo de destruição encerrado corretamente. Parabens!!! >>
> mc2_db.log
> fi
> echo Bye...
> echo
>
> ======================================= fim
>
> Espero ter ajudado e agradeço publicamente ao Júlio e Aurelio.net pelas
> lições!!!
>
> Aguardo críticas e sujestões.
>
> Nogueira
> address@hidden <nogueira_jr%40ig.com.br>
>
> PS: Estou terminando as mesmas rotinas para SQLite3 !!!
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>  
>



-- 
Tiago B Peczenyj
Linux User #405772

http://peczenyj.blogspot.com/


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

[Prev in Thread] Current Thread [Next in Thread]