Infra - Linux

Criando um aplicação em Shell-Script acessando um Bco Interbase/Firebird

Neste tutorial iremos criar um aplicação de cadastro de cliente usando Shell-Script com uma base de dados Interbase/Firebird.

por Alessandro de Oliveira Faria



Neste tutorial iremos criar um aplicação de cadastro de cliente usando Shell-Script com uma base de dados Interbase/Firebird.

CRIANDO O BCO DE DADOS:

Para instalação do Interbase ou firebird, o link http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=180 explica alguns macetes e conceitos de intalação do mesmo. Portanto partirei do principio que o Interbase/Firebird esta devidamente configurado.

Iremos criar um banco de dados chamado BCO.GDB com apenas uma tabela para efeito de demonstação. Usaremos o programa isql para efetuar esta operação.

Neste link existem todos os arquivo citado neste tutorial.

Antes de criarmos o BCO, vamos gerar uma arquivo chamado METADATA.TXT com o seguinte conteudo:

---------------------------------[ METADATA.TXT ]---------------------------------------------
SET SQL DIALECT 1;
CREATE DATABASE "/rede/servdad/BCO.GDB" USER "SYSDBA" PASSWORD "masterkey" PAGE_SIZE 1024;
CREATE TABLE TAB_CLI_001 
(
CODIGO INTEGER DEFAULT 1 NOT NULL,
NOME VARCHAR(60),
FON1 VARCHAR(15),
FON2 VARCHAR(15),
FAX VARCHAR(15),
TEL VARCHAR(40),
BAIRRO VARCHAR(25),
ENDE VARCHAR(40)
);
---------------------------------[ FIM ]---------------------------------------------

O arquivo acima, não passa de um script para o interpretador SQL do Banco.

Agora vamos realmente começar o processo de criação do Bco:

[root@486 interbase]# /opt/interbase/bin/isql

Este comando inicia o interpretador SQL.

O comando IN explica ao interpretado que devemos importar o arquivo recebido como parametro e executar as instruções SQL contida no mesmo.

Use CONNECT or CREATE DATABASE to specify a database.
SQL> IN METADATA.TXT;
SQL> QUIT;

Se tudo foi concluido com sucesso, neste passo criamos um banco de dados vazio. Para confirmar a sua criação verifique o conteudo no diretorio indicado com o comando ls:

[root@486 interbase]# ls /rede/servdad

Vamos brincar um pouco com os comando básicos do SQL:

A linha abaixo inicia o interpretador SQL e abre o banco de dados criado:

[root@486 interbase]# isql /rede/servdad/BCO.GDB -u SYSDBA -p masterkey
Database: /rede/servdad/BCO.GDB, User: SYSDBA

Exibindo algumas informações do Banco de dados:

SQL> SHOW DATABASE;
Database: /rede/servdad/BCO.GDB
Owner: SYSDBA
PAGE_SIZE 1024
Number of DB pages allocated = 242
Sweep interval = 20000
Forced Writes are OFF
Transaction - oldest = 10
Transaction - oldest active = 11
Transaction - oldest snapshot = 8
Transaction - Next = 16
Default Character set: NONE

Mostrando as tabelas existente no Banco:

SQL> SHOW TABLE;
TAB_CLI_001

Exibindo os campos da tabela:

SQL> SHOW TABLE TAB_CLI_001;
CODIGO INTEGER Not Null DEFAULT 1
NOME VARCHAR(60) Nullable
FON1 VARCHAR(15) Nullable
FON2 VARCHAR(15) Nullable
FAX VARCHAR(15) Nullable
TEL VARCHAR(40) Nullable
BAIRRO VARCHAR(25) Nullable
ENDE VARCHAR(40) Nullable
SQL> 

Inserindo um registro:

SQL> INSERT INTO TAB_CLI_001 VALUES (1,"ALESSANDRO DE OLIVEIRA FARIA","(17)3343 3020","(17) 3343 
3022","","","CENTRO","RUA DUQUE DE CAXIAS, 1107");
Exibindo o conteudo da Tabela:
SQL> SELECT CODIGO, NOME FROM TAB_CLI_001;
CODIGO NOME
============ ============================================================
1 ALESSANDRO DE OLIVEIRA FARIA
SQL> COMMIT;
SQL> 

Até aqui temos o Banco de dados criado em perfeito funcionamento.

CRIANDO A APLICAÇÃO:

Antes de explicar o conceito/funcionamento vamos criar os arquivos segundários:

Vamos primeiro criar o arquivo sql01 cujo conteu é um comando SQL para localizar o maior codigo cadastrado:

---------------------------------[ sql01 ]---------------------------------------
SELECT "*" || MAX(CODIGO) FROM TAB_CLI_001;
EXIT;
---------------------------------[ FIM ]------------------------------------------

O próximo arquivo a ser criado, é o execsql01, que simplesmente executa a linha SQL do arquivo sql01:

-------------------------------[ execsql01 ]-------------------------------------
isql /rede/servdad/BCO.GDB -u SYSDBA -p masterkey -i sql01 | grep "*" | cut -c2-
-------------------------------[ FIM ]---------------------------------------------

A APLICAÇÃO EM SHELL-SCRIPT:

Crie um arquivo chamado cadcli com o seguinte conteúdo e sem a numeração de linhas (Ressalto que todos estes arquivos se encontram no link mencionado no inicio do tutorial):

-----------------------------[ cadcli ]---------------------------------------
  
1:mCODI=`./execsql01`
2:mCODI=`expr $mCODI + 1`
3:
4:while [ $mCODI -gt 0 ] 
5:do 
6: clear
7:
8: tput sgr0
9: tput cup 23 0 ; echo 
"MSG:..........................................................................." 
10: tput cup 17 1 ; echo "------------------- Informacoes do ultimo cadastro efetuado. 
------------------"
11: tput cup 19 1 ; echo "CODIGO..: $mCODI"
12: tput cup 21 1 ; echo "NOME....: $mNOME"
13:
14: mRESP="S"
15: mNOME="..................................................."
16: mENDE="........................................"
17: mBAIR="........................."
18: mTELE="........................................"
19: mFON1="..............."
20: mFON2="..............."
21: mFAXS="..............."
22:
23: tput cup 0 0 ;echo "NETI TECNOLOGIA - Cadastro de Cliente - `date`"
24: tput cup 1 0 ; echo 
"=========================================================================="
25: tput cup 3 1 ; echo "CODIGO..: Sugerido:($mCODI)"
26: tput cup 5 1 ; echo "NOME....: $mNOME"
27: tput cup 7 1 ; echo "ENDERECO: $mENDE"
28: tput cup 9 1 ; echo "BAIRRO..: $mBAIR"
29: tput cup 11 1 ; echo "TELEFONE: $mTELE"
30: tput cup 12 9 ; echo ": $mFON1"
31: tput cup 13 9 ; echo ": $mFON2"
32: tput cup 15 1 ; echo "FAX.....: $mFAXS"
33:
34: tput bold 
35: tput cup 3 11 ; read mCODI
36: if [ $mCODI = "FIM" ]
37: then
38: exit
39: fi
40: tput cup 5 11 ; read mNOME
41: tput cup 7 11 ; read mENDE
42: tput cup 9 11 ; read mBAIR
43: tput cup 11 11 ; read mTELE
44: tput cup 12 11 ; read mFON1
45: tput cup 13 11 ; read mFON2
46: tput cup 15 11 ; read mFAXS
47: 
48: tput cup 23 4 ; echo -e "CONFIRMA A OPERACAO? \c" 
49: read mRESP
50:
51: tput sgr0
52: if [ $mRESP = S ]
53: then
54: echo "INSERT INTO TAB_CLI_001 VALUES 
($mCODI,"$mNOME","$mFON1","$mFON2","$mFAXS","$mTELE","$mBAIR","$mENDE");" | isql 
/rede/servdad/BCO.GDB -u SYSDBA -p masterkey> /dev/null
55: mCODI=`expr $mCODI + 1`
56: fi
57:done
-----------------------------[ FIM ]-------------------------------------------

salve este arquivo com o nome cadcli e de permissões de execução para o mesmo:

[root@486 interbase]# chmod 770 cadcli

Agora para executa-lo para digitar:

[root@486 interbase]#./cadcli

ENTENDENDO O CODIGO EM SHELL:

As linhas 1 e 2 executa o sql que retorna o maior codigo cadastro e incrementa o valor 1 no resultado:

mCODI=`./execsql01`
mCODI=`expr $mCODI + 1`

Entre a linha 4 e 33 desenhamos toda a tela inclusive imprimindo o codigo sugestivo e declaramos todas as variaveis referente ao cadastro.

Na linha 33 trocamos o atributos da fonte do terminal texto para bold.

Já na linha 34 pegamos o codigo do cliente informado via teclado e o armazenamos na variavel mCODI.

As linhas 36 a 39 define se a aplicação deve terminar ou proceder com o cadastro, que toma a decisao digitando a string FIM no campo código.

Já na linha 40 a 46 os dados são informados e armazenados nas respectivas variáveis.

Nas linhas 48 a 56 pergunta se o usuario confirma a inclusão, assim sendo os dados digitando são incluido no banco de dados, caso contrário o mesmo é descartado voltando para um nova inclusão.

Acho que este documento mostrou o potencial dos comandos Shell junto ao um Banco de Dados Free e poderoso.

Alessandro de Oliveira Faria

Alessandro de Oliveira Faria - Sócio-proprietário da empresa NETi TECNOLOGIA fundada em Junho de 1996 (http://www.netitec.com.br), empresa especializada em desenvolvimento de software e soluções biométricas, Consultor Biométrico na tecnologia de reconhecimento facial, atuando na área de tecnologia desde 1986 assim propiciando ao mercado soluções em software nas mais diversas linguagens e plataforma, levando o Linux a sério desde 1998 com desenvolvimento de soluções open-source, membro colaborador da comunidade Viva O Linux, mantenedor da biblioteca open-source de vídeo captura entre outros projetos.