Estok SH 1.2b - Controle de Estoque em Shell Script
Publicado por Raphael Ciribelly (última atualização em 19/02/2020)
[ Hits: 2.694 ]
Sistema de Estoque em 47.659 bytes
Funcionalidades: Cadastro de produtos, Clientes, Fornecedores, Entrada e Saída e contagem de produtos
Como usar
Dê permissão para execução:
$ chmod +x estok1.2b.sh
Execute o arquivo com a opção -m (menu):
$ ./estok1.2b.sh -m
Observações: o programa é bem simples, fiz para estudo, criei em apenas uma semana então possui alguns bugs que precisam ser resolvidos. Sinta-se a vontade para usar, copiar e alterar o código, caso queira melhorar o programa.
Abraço a todos.
#!/usr/bin/env bash
# Autor: Raphael Ciribelly
# Bash: 4.4.20(1)-release (x86_64-pc-linux-gnu)
# Idioma: pt_BR.UTF-8
#---> variaveis
MENUPRINCIPAL="menuloop"
ESTOKDIR=~/estok # diretorio estok
PRODUTODIR=~/estok/produtos # diretorio produtos
LOGDIR=~/estok/logs # diretorio log
CLIENTEDIR=~/estok/clientes # diretorio clientes
FORNECEDORDIR=~/estok/fornecedores # diretorio fornecedores
DATAATUAL=$(date "+%d/%m/%Y %T") # data cadastro
SOMA=~/estok/soma.sum # arquivo log soma
SOMA2=~/estok/soma2.sum # arquivo log soma 2
SOMA3=~/estok/soma3.sum # arquivo log soma 3
SOMAF=~/estok/somafinal.sum # arquivo log soma final
VALORSOMAF=$"(<~/estok/soma2.sum)" # valor final da soma
LISTALOG=~/estok/logs/lista.list # arquivo lista.list utilizado em consulta de iténs
ENTRADALOG=~/estok/logs/entrada.log # log entrada
SAIDALOG=~/estok/logs/saida.log # log saida
BUSCALOG=~/estok/logs/busca.log # log busca
EXCLUIDOLOG=~/estok/logs/excluidos.log # log excluidos
ALTERADOLOG=~/estok/logs/alterados.log # log alterados
CADASTROPRODUTOLOG=~/estok/logs/cadastro_produtos.log # log cadastrados
CADASTROCLIENTELOG=~/estok/logs/cadastro_cliente.log # log clientes
CADASTROFORNECEDORLOG=~/estok/logs/cadastro_fornecedor.log # log fornecedores
RELATORIOLOG=~/estok/logs/relatorio.log # log relatorio
#---> verificações
# diretorio estok existe ???
if [ -d $ESTOKDIR ];then
sleep 1s ;
else
mkdir $ESTOKDIR ; \
mkdir $PRODUTODIR ; \
mkdir $LOGDIR ; \
mkdir $CLIENTEDIR ; \
mkdir $FORNECEDORDIR ; \
fi
#======================== Arrays COMEÇO ===================================
#---> arrays
#array cadastro produtos array 11 campos
CADASTROPRODUTO=("NOME:" "UNIDADE:" "CATEGORIA:" "FORNECEDOR:" "CODIGO:" "QUANTIDADE:" "ESTOQUE MINIMO:" "VALOR R$:" "CUSTO R$:" "DESCRIÇÃO:" "DATA:")
#array cadastro clientes array 19 campos
CADASTROCLIENTE=("CODIGO:" "NOME:" "DATA DE NASCIMENTO:" "SEXO:" "ENDEREÇO:" "BAIRRO" "NUMERO:" "COMPLEMENTO:" "CIDADE:" "UF:" "CEP:" "E-MAIL:" "FISICA/JURÍCA:" "CPF/CNPJ:" "RG:" "TELEFONE:" "CELULAR:" "INFORMAÇÕES ADICIONAIS:" "DATA:")
#array cadastro fornecedores array 23 campos
CADASTROFORNECEDOR=("CODIGO:" "NOME:" "NOME FANTASIA:" "RAZÃO SOCIAL:" "RAMO DE ATIVIDADE:" "ENDEREÇO:" "BAIRRO" "NUMERO:" "COMPLEMENTO:" "CIDADE:" "UF:" "CEP:" "PAÍS:" "E-MAIL:" "SITE:" "FISICA/JURÍCA:" "CPF/CNPJ:" "INSCRIÇÃO ESTADUAL:" "TELEFONE-1:" "TELEFONE-2" "CELULAR:" "INFORMAÇÕES ADICIONAIS:" "DATA:")
#======================== Arrays FIM =====================================
#---> funções
trocavirgula(){
cd $PRODUTODIR 2>>/dev/null ;
sed -i 's/,/./g' *.prod 2>>/dev/null ;
}
# função: deseja continuar ???
perguntacontinuar () {
while true; do
read -e -p "(s/n)?: $1" sn
case $sn in
[Ss]* )
sleep 1 ;
return 0 ;
;;
[Nn]* )
menu ;
return 1 ;
;;
* )
echo "Entre com (s/n)" ;
;;
esac
done
}
#======================== FUNÇÃO: listas COMEÇO ==========================
# funçao: ver lista produtos???
verlistaproduto () {
while true; do
read -e -p "Deseja visualizar lista de produtos (s/n)?: $1" sn
case $sn in
[Ss]* )
ls $PRODUTODIR | sed -e "s/\.prod$//" | less -i ;
read -rsn1 -p "Pressione ENTER para voltar ao menu" ;
menu ;
return 0 ;
;;
[Nn]* )
menu ;
return 1 ;
;;
* )
echo "Entre com (s/n)" ;
;;
esac
done
}
# funçao: ver lista clientes ???
verlistacliente () {
while true; do
read -e -p "Deseja visualizar lista de clientes (s/n)?: $1" sn
case $sn in
[Ss]* )
ls $CLIENTEDIR | sed -e "s/\.cli$//" | less -i ;
read -rsn1 -p "Pressione ENTER para voltar ao menu" ;
menu ;
return 0 ;
;;
[Nn]* )
menu ;
return 1 ;
;;
* )
echo "Entre com (s/n)" ;
;;
esac
done
}
# funçao: ver lista fornecedor ???
verlistafornecedor () {
while true; do
read -e -p "Deseja visualizar lista de fornecedores (s/n)?: $1" sn
case $sn in
[Ss]* )
ls $FORNECEDORDIR | sed -e "s/\.for$//" | less -i ;
read -rsn1 -p "Pressione ENTER para voltar ao menu" ;
menu ;
return 0 ;
;;
[Nn]* )
menu ;
return 1 ;
;;
* )
echo "Entre com (s/n)" ;
;;
esac
done
}
#======================== FUNÇÃO: lista FIM ===============================
# funçao: deleta arquivos de soma
deletasoma() {
cd $ESTOKDIR 2>>/dev/null ;
rm -r $SOMA 2>>/dev/null ;
rm -r $SOMA2 2>>/dev/null;
rm -r $SOMA3 2>>/dev/null;
rm -r $SOMAF 2>>/dev/null ;
}
#======================== Cadastro COMEÇO ==================================
cadastrofornecedor(){
echo
echo "------------------------------"
echo "*** Cadastro de fornecedor ***" ;
echo "------------------------------"
cd $FORNECEDORDIR ; # entra no diretorio fornecedor
read -e -p "Digite o nome do fornecedor: " "nomefornecedor" ; # pega nome fornecedor
[ -z "$nomefornecedor" ] && menu ; # se variavel é nula volta ao menu
if [ -e "$nomefornecedor.for" ]; then # testa se fornecedor existe
echo "Cliente "$nomefornecedor" já existe" ; # se fornecedor existe
echo "Deseja continuar?"
perguntacontinuar ; # pergunta se deseja continuar
fi
read -e -p "Codigo: " codigo ; # se existe e você deu ( sim ) continua formulario
read -e -p "Nome fantasia: " nomefantasia ;
read -e -p "Razão social: " razaosocial ;
read -e -p "Ramo de atividade: " ramoatividade ;
read -e -p "Endereço: " endereco ;
read -e -p "Bairro: " bairro ;
read -e -p "Numero: " numero ;
read -e -p "Complemento: " complemento ;
read -e -p "Cidade: " cidade ;
read -e -p "UF: " uf ;
read -e -p "CEP: " cep ;
read -e -p "País: " pais ;
read -e -p "E-mail: " email ;
read -e -p "Site: " site ;
read -e -p "Física/Jurídica: " fisicajuridica ;
read -e -p "CPF/CNPJ: " cpfcnpj ;
read -e -p "Inscrição estadual: " inscricaoestadual ;
read -e -p "Telefone-1: " telefone1 ;
read -e -p "Telefone-2: " telefone2 ;
read -e -p "Celular: " celular ;
read -e -p "Informações adicionais: " informacoes ;
echo "Deseja gravar dados?" ;
perguntacontinuar ; # pergunta se deseja gravar dados
echo "------------------------------" >> "$nomefornecedor.for" ; # gera arquivo com nome em diretorio fornecedores e gera log
echo ${CADASTROFORNECEDOR[0]} "$codigo" >> "$nomefornecedor.for" ;
echo ${CADASTROFORNECEDOR[1]} "$nomefornecedor" >> "$nomefornecedor.for" ;
echo ${CADASTROFORNECEDOR[2]} "$nomefantasia" >> "$nomefornecedor.for" ;
echo ${CADASTROFORNECEDOR[3]} "$razaosocial" >> "$nomefornecedor.for" ;
echo ${CADASTROFORNECEDOR[4]} "$ramoatividade" >> "$nomefornecedor.for" ;
echo ${CADASTROFORNECEDOR[5]} "$endereco" >> "$nomefornecedor.for" ;
echo ${CADASTROFORNECEDOR[6]} "$bairro" >> "$nomefornecedor.for" ;
echo ${CADASTROFORNECEDOR[7]} "$numero" >> "$nomefornecedor.for" ;
echo ${CADASTROFORNECEDOR[8]} "$complemento" >> "$nomefornecedor.for" ;
echo ${CADASTROFORNECEDOR[9]} "$cidade" >> "$nomefornecedor.for" ;
echo ${CADASTROFORNECEDOR[10]} "$uf" >> "$nomefornecedor.for" ;
echo ${CADASTROFORNECEDOR[11]} "$cep" >> "$nomefornecedor.for" ;
echo ${CADASTROFORNECEDOR[12]} "$pais" >> "$nomefornecedor.for" ;
echo ${CADASTROFORNECEDOR[13]} "$email" >> "$nomefornecedor.for" ;
echo ${CADASTROFORNECEDOR[14]} "$site" >> "$nomefornecedor.for" ;
echo ${CADASTROFORNECEDOR[15]} "$fisicajuridica" >> "$nomefornecedor.for" ;
echo ${CADASTROFORNECEDOR[16]} "$cpfcpnj" >> "$nomefornecedor.for" ;
echo ${CADASTROFORNECEDOR[17]} "$inscricaoestadual" >> "$nomefornecedor.for" ;
echo ${CADASTROFORNECEDOR[18]} "$telefone1" >> "$nomefornecedor.for" ;
echo ${CADASTROFORNECEDOR[19]} "$telefone2" >> "$nomefornecedor.for" ;
echo ${CADASTROFORNECEDOR[20]} "$celular" >> "$nomefornecedor.for" ;
echo ${CADASTROFORNECEDOR[21]} "$informacoes" >> "$nomefornecedor.for" ;
echo ${CADASTROFORNECEDOR[22]} "$DATAATUAL" >> "$nomefornecedor.for" ;
echo "------------------------------" >> "$nomefornecedor.for" ;
echo "******" >> $CADASTROFORNECEDORLOG ;
echo "NOME:" "$nomefornecedor.for" >> $CADASTROFORNECEDORLOG ;
echo "CODIGO:" "$codigo" >> $CADASTROFORNECEDORLOG ;
echo "Data de cadastro:" "$DATAATUAL" >> $CADASTROFORNECEDORLOG ;
echo "******" >> $CADASTROFORNECEDORLOG ;
less -iC "$nomefornecedor.for" ; # Abre less e lê arquivo criado
echo "------------------------------" ;
read -rsn1 -p "Pressione ENTER para continuar" ;
echo "------------------------------" ;
}
cadastrocliente() {
echo
echo "------------------------------"
echo " *** Cadastro de cliente ***" ;
echo "------------------------------"
cd $CLIENTEDIR ; # entra no diretorio cliente
read -e -p "Digite o nome do cliente: " "nomecliente" ; # pega nome cliente
[ -z "$nomecliente" ] && menu ; # se variavel é nula volta ao menu
if [ -e "$nomecliente.cli" ]; then # testa se cliente existe
echo "Cliente "$nomecliente" já existe" ; # se cliente existe
echo "Deseja continuar?"
perguntacontinuar ; # pergunta se deseja continuar
fi
read -e -p "Codigo: " codigo ; # se existe e você deu ( sim ) continua formulario
read -e -p "Data de nascimento: " datanascimento ;
read -e -p "Sexo: " sexo ;
read -e -p "Endereço: " endereco ;
read -e -p "Bairro: " bairro ;
read -e -p "Numero: " numero ;
read -e -p "Complemento: " complemento ;
read -e -p "Cidade: " cidade ;
read -e -p "UF: " uf ;
read -e -p "CEP: " cep ;
read -e -p "E-mail: " email ;
read -e -p "Física/Jurídica: " fiscajuridica ;
read -e -p "CPF/CNPJ: " cpfcnpj ;
read -e -p "RG: " rg ;
read -e -p "Telefone: " telefone ;
read -e -p "Celular: " celular ;
read -e -p "Informações adicionais: " informacoes ;
echo "Deseja gravar dados?" ;
perguntacontinuar ; # pergunta se deseja gravar dados
echo "------------------------------" >> "$nomecliente.cli" ; # gera arquivo com nome em diretorio clientes e gera log
echo ${CADASTROCLIENTE[0]} "$codigo" >> "$nomecliente.cli" ;
echo ${CADASTROCLIENTE[1]} "$nomecliente" >> "$nomecliente.cli" ;
echo ${CADASTROCLIENTE[2]} "$datanascimento" >> "$nomecliente.cli" ;
echo ${CADASTROCLIENTE[3]} "$sexo" >> "$nomecliente.cli" ;
echo ${CADASTROCLIENTE[4]} "$endereco" >> "$nomecliente.cli" ;
echo ${CADASTROCLIENTE[5]} "$bairro" >> "$nomecliente.cli" ;
echo ${CADASTROCLIENTE[6]} "$numero" >> "$nomecliente.cli" ;
echo ${CADASTROCLIENTE[7]} "$complemento" >> "$nomecliente.cli" ;
echo ${CADASTROCLIENTE[8]} "$cidade" >> "$nomecliente.cli" ;
echo ${CADASTROCLIENTE[9]} "$uf" >> "$nomecliente.cli" ;
echo ${CADASTROCLIENTE[10]} "$cep" >> "$nomecliente.cli" ;
echo ${CADASTROCLIENTE[11]} "$email" >> "$nomecliente.cli" ;
echo ${CADASTROCLIENTE[12]} "$fisicajuridica" >> "$nomecliente.cli" ;
echo ${CADASTROCLIENTE[13]} "$cpfcnpj" >> "$nomecliente.cli" ;
echo ${CADASTROCLIENTE[14]} "$rg" >> "$nomecliente.cli" ;
echo ${CADASTROCLIENTE[15]} "$telefone" >> "$nomecliente.cli" ;
echo ${CADASTROCLIENTE[16]} "$celular" >> "$nomecliente.cli" ;
echo ${CADASTROCLIENTE[17]} "$informacoes" >> "$nomecliente.cli" ;
echo ${CADASTROCLIENTE[18]} "$DATAATUAL" >> "$nomecliente.cli" ;
echo "------------------------------" >> "$nomecliente.cli" ;
echo "******" >> $CADASTROCLIENTELOG ;
echo "NOME:" "$nomecliente.cli" >> $CADASTROCLIENTELOG ;
echo "CODIGO:" "$codigo" >> $CADASTROCLIENTELOG ;
echo "Data de cadastro:" "$DATAATUAL" >> $CADASTROCLIENTELOG ;
echo "******" >> $CADASTROCLIENTELOG ;
less -iC "$nomecliente.cli" ; # Abre less e lê arquivo criado
echo "------------------------------" ;
read -rsn1 -p "Pressione ENTER para continuar" ;
echo "------------------------------" ;
}
cadastroproduto(){ # submenu produto
echo
echo "------------------------------" ;
echo " *** Cadastro de produto ***" ;
echo "------------------------------" ;
cd $PRODUTODIR ; # entra no diretorio produtos
read -e -p "Nome do produto: " nomeproduto ; # pega nome do produto
[ -z "$nomeproduto" ] && menu ; # se variavel é nula volta ao menu
if [ -f "$nomeproduto".prod ];then # verifica se produto existe
echo "Produto "$nomeproduto" já existe" ; # se produto existe
echo "Deseja continuar?"
perguntacontinuar ; # pergunta se deseja continuar
fi
read -e -p "Unidade: " unidade ; # se existe e você deu ( sim ) continua formulario
read -e -p "Categoria: " categoria ;
read -e -p "Fornecedor: " fornecedor ;
read -e -p "Codigo: " codigo ;
read -e -p "Quantidade: " quantidade ;
read -e -p "Estoque minimo: " estoqueminimo ;
read -e -p "Valor R$: " valor ;
read -e -p "Custo R$: " custo ;
read -e -p "Descrição: " descricao ;
echo "Deseja gravar dados?" ;
perguntacontinuar ; # pergunta se deseja gravar dados
echo "------------------------------" >> "$nomeproduto.prod" ; # gera arquivo com nome em diretorio produtos e envia dados
echo ${CADASTROPRODUTO[0]} "$nomeproduto" >> "$nomeproduto.prod" ;
echo ${CADASTROPRODUTO[1]} "$unidade" >> "$nomeproduto.prod" ;
echo ${CADASTROPRODUTO[2]} "$categoria" >> "$nomeproduto.prod" ;
echo ${CADASTROPRODUTO[3]} "$fornecedor" >> "$nomeproduto.prod" ;
echo ${CADASTROPRODUTO[4]} "$codigo" >> "$nomeproduto.prod" ;
echo ${CADASTROPRODUTO[5]} "$quantidade" >> "$nomeproduto.prod" ;
echo ${CADASTROPRODUTO[6]} "$estoqueminimo" >> "$nomeproduto.prod" ;
echo ${CADASTROPRODUTO[7]} "$valor" >> "$nomeproduto.prod" ;
echo ${CADASTROPRODUTO[8]} "$custo" >> "$nomeproduto.prod" ;
echo ${CADASTROPRODUTO[9]} "$descricao" >> "$nomeproduto.prod" ;
echo ${CADASTROPRODUTO[10]} "$DATAATUAL" >> "$nomeproduto.prod" ;
echo "------------------------------" >> "$nomeproduto.prod" ;
echo "******" >> $CADASTROPRODUTOLOG ;
echo "Produto:" "$nomeproduto.prod" >> $CADASTROPRODUTOLOG ;
echo "Quantidade:" "$quantidade" >> $CADASTROPRODUTOLOG ;
echo "Data de cadastro:" "$DATAATUAL" >> $CADASTROPRODUTOLOG ;
echo "******" >> $CADASTROPRODUTOLOG ;
trocavirgula ;
less -iC "$nomeproduto.prod" ; # Abre less e lê arquivo criado
echo "------------------------------" ;
read -rsn1 -p "Pressione ENTER para continuar" ;
echo "------------------------------" ;
}
# função: opção menu cadastro
opcaocadastro() {
echo
echo "------------------------------" ;
echo " *** Cadastro ***" ;
echo "------------------------------" ;
read -e -p "Produto [P] Cliente [C] Fornecedor [F] " CADASTRO ;
case "$CADASTRO" in
[Pp]*) cadastroproduto ;;
[Cc]*) cadastrocliente ;;
[Ff]*) cadastrofornecedor ;;
*) echo "Opção Inválida"
echo "------------------------------" ;
read -rsn1 -p "Pressione ENTER para continuar" ;
echo "------------------------------" ; ;;
esac
}
#======================== Cadastro FIM ===================================
#======================== Entrada/Saída COMEÇO ===========================
entrada(){
echo
echo "------------------------------" ;
echo " *** Entrada ***" ;
echo "------------------------------" ;
cd $PRODUTODIR ; # entra no diretorio produtos
read -e -p "Digite o nome do produto: " "nomeentrada" ; # pega nome produto entrada
[ -z "$nomeentrada" ] && menu ; # se variavel é nula volta ao menu
if [ -e "$nomeentrada.prod" ]; then # testa se produto existe ou não
sed -n "2p" "$nomeentrada".prod ; # mostra segunda linha arquivo produto
sed -n "7p" "$nomeentrada".prod ; # mostra sexta linha do arquivo produto
sed -n -e "s/^.*QUANTIDADE: //p" "$nomeentrada".prod >> $SOMA ; # envia quantidade do .prod para soma.sum
read -p "Digite a quantidade para entrada: " "quantentrada" ; # pega valor digitado
echo "$quantentrada" >> $SOMA ; # cria soma.sum com valor digitado
paste -sd+ $SOMA | bc >> "$SOMA2" ; # soma arquivos soma.sum e soma2.sum
sleep 1 ; # Pausa
VALORF=`cat $SOMA2` ; sed -i "s/\(QUANTIDADE:\).*/\1 ${VALORF}/" "$nomeentrada".prod ; # grava soma
sed -n "2p" "$nomeentrada".prod ; # mostra segunda linha arquivo produto
sed -n "7p" "$nomeentrada".prod ; # mostra sexta linha do arquivo produto
echo "******" >> $ENTRADALOG ; # adiciona linha no log entrada
echo "Produto:" "$nomeentrada".prod >> $ENTRADALOG ; # adiciona nome do produto log entrada
echo "Quantidade de entrada:" "$quantentrada" >> $ENTRADALOG ; # envia quantidade de entrada para log
read -p "Data de entrada: " "dataentrada" ; # pega data entrada
echo "Data de entrada:" "$dataentrada" >> $ENTRADALOG ; # adiciona [Data] ao log entrada
read -p "Fornecedor: " "fornecedorentrada" ; # pega fornecedor
echo "Fornecedor:" "$fornecedorentrada" >> $ENTRADALOG ; # adiciona [Fornecedor] ao log entrada
echo "******" >> $ENTRADALOG ; # adiciona linha log entrada
read -rsn1 -p "Pressione ENTER para continuar" ; # enter para voltar ao menu
deletasoma 2>>/dev/null ;
menu ;
else # produto entrada não existe
echo "Produto "$nomeentrada" não existe"
verlistaproduto ;
fi
}
saida(){
echo
echo "------------------------------"
echo " *** Saída ***" ;
echo "------------------------------"
cd $PRODUTODIR ; # entra no diretorio produtos
read -e -p "Digite o nome do produto: " "nomesaida" ; # pega nome produto saida
[ -z "$nomesaida" ] && menu ; # se variavel é nula volta ao menu
if [ -e "$nomesaida.prod" ]; then # testa se produto existe ou não
sed -n "2p" "$nomesaida".prod ; # mostra segunda linha arquivo produto
sed -n "7p" "$nomesaida".prod ; # mostra sexta linha do arquivo produto
sed -n -e "s/^.*QUANTIDADE: //p" "$nomesaida".prod >> $SOMA ; # envia quantidade do .prod para soma.sum
read -p "Digite a quantidade para saída: " "quantsaida" ; # pega valor digitado
echo "$quantsaida" >> $SOMA ; # cria soma.sum com valor digitado
paste -sd- $SOMA | bc >> "$SOMA2" ;
sleep 1 ; # Pausa
VALORF=`cat $SOMA2` ; sed -i "s/\(QUANTIDADE:\).*/\1 ${VALORF}/" "$nomesaida".prod ; # grava soma
sed -n "2p" "$nomesaida".prod ; # mostra segunda linha arquivo produto
sed -n "7p" "$nomesaida".prod ; # mostra sexta linha do arquivo produto
echo "******" >> $SAIDALOG ;
echo "Produto:" "$nomesaida".prod >> $SAIDALOG ; # adiciona nome do produto log saida
echo "Quantidade de saída:" "$quantsaida" >> $SAIDALOG ; # envia quantidade de saida para log
read -p "Data de saída: " "datasaida" ; # pega nome data saida
echo "Data de saída:" "$datasaida" >> $SAIDALOG ; # adiciona [Data] ao log saida
read -p "Destino/Cliente: " "descli" ; # pega fornecedor
echo "Destino/Cliente:" "$descli" >> $SAIDALOG ; # adiciona [Destino/Cliente] ao log saida
echo "******" >> $SAIDALOG ;
read -rsn1 -p "Pressione ENTER para continuar" ; # enter para voltar ao menu
deletasoma 2>>/dev/null ;
menu ;
else # produto saida nao existe
echo "Arquivo "$nomesaida".prod não existe" ;
verlistaproduto ;
menu ;
fi
}
# função: opção menu entrada/saída
opcaoentradasaida(){
read -e -p "Entrada [E] Saída [S] " ENTRADASAIDA ;
case "$ENTRADASAIDA" in
[Ee]*) entrada ;;
[Ss]*) saida ;;
*) echo "Opção Inválida"
echo "------------------------------" ;
read -rsn1 -p "Pressione ENTER para continuar" ;
echo "------------------------------" ; ;;
esac
}
#======================== Entrada/Saída FIM ==============================
#======================== Consulta Itens COMEÇO ==========================
consultaproduto(){
cd $PRODUTODIR ;
echo "------------------------------" ;
echo " *** Consultar produtos ***" ;
echo "------------------------------" ;
cat $PRODUTODIR/*.prod > $LISTALOG ; # cria lista todo conteúdo arquivos .prod
echo "Quantidade total de iténs:" `ls -l *.prod | wc -l` >> $LISTALOG ; # Conta todos os arquivos .prod
less -iC $LISTALOG ;
}
consultacliente(){
cd $CLIENTEDIR ;
echo "------------------------------" ;
echo " *** Consultar clientes ***" ;
echo "------------------------------" ;
cat $CLIENTEDIR/*.cli > $LISTALOG ; # cria lista todo conteúdo arquivos .prod
echo "Quantidade total de iténs:" `ls -l *.cli | wc -l` >> $LISTALOG ; # Conta todos os arquivos .cli
less -iC $LISTALOG ;
}
consultafornecedor(){
cd $FORNECEDORDIR ;
echo "------------------------------" ;
echo " *** Consultar clientes ***" ;
echo "------------------------------" ;
$(cat $FORNECEDORDIR/*.for > $LISTALOG) ; # cria lista todo conteúdo arquivos .prod
echo "Quantidade total de iténs:" `ls -l *.for | wc -l` >> $LISTALOG ; # Conta todos os arquivos .for
less -iC $LISTALOG ;
}
opcaoconsultaritens(){
echo
echo "------------------------------" ;
echo " *** Consultar itens ***" ;
echo "------------------------------" ;
read -e -p "Produto [P] Cliente [C] Fornecedor [F] " CONSULTA ;
case "$CONSULTA" in
[Pp]*) consultaproduto ;;
[Cc]*) consultacliente ;;
[Ff]*) consultafornecedor ;;
*) echo "Opção Inválida"
echo "------------------------------" ;
read -rsn1 -p "Pressione ENTER para continuar" ;
echo "------------------------------" ; ;;
esac
}
#======================== Consulta Itens FIM ============================
#======================== Busca COMEÇO ===================================
buscaproduto(){
echo
echo "------------------------------" ;
echo " *** Busca produto ***" ;
echo "------------------------------" ;
cd $PRODUTODIR ; # entra no diretorio produtos
read -e -p "Nome do produto: " buscaproduto ; # pega nome do produto
rm -r $BUSCALOG 2>>/dev/null ;
read -p "Buscar: " "buscaconteudo" ; # pega segundo nome da busca
echo "" > $BUSCALOG ; # apaga todo conteudo anterior da busca
echo "*** Resultados ***" >> $BUSCALOG ; # envia resultados para BUSCALOG
echo "--------------------------" >> $BUSCALOG ;
echo "--- Itens relacionados ---" >> $BUSCALOG ;
grep -EiRl "$buscaproduto|$buscaconteudo" *.prod 2>>/dev/null | sed 's/\.prod//g' >> $BUSCALOG 2>>/dev/null ; # busca palavra nos arquivos .pr od
echo "--------------------------" >> $BUSCALOG ;
grep -Ei "$buscaproduto|$buscaconteudo" *.prod >> $BUSCALOG 2>>/dev/null ; # busca palavra nos arquivos .prod
less -i $BUSCALOG
echo "------------------------------" ;
read -rsn1 -p "Pressione ENTER para continuar" ;
echo "------------------------------" ;
}
buscacliente(){
echo
echo "------------------------------" ;
echo " *** Busca cliente ***" ;
echo "------------------------------" ;
cd $CLIENTEDIR ; # entra no diretorio produtos
read -e -p "Nome do cliente: " buscacliente ; # pega nome do cliente
rm -r $BUSCALOG 2>>/dev/null ;
read -p "Buscar: " "buscaconteudo" ; # pega segundo nome da busca
echo "" > $BUSCALOG ; # apaga todo conteudo anterior da busca
echo "*** Resultados ***" >> $BUSCALOG ; # envia resultados para BUSCALOG
echo "--------------------------" >> $BUSCALOG ;
echo "--- Itens relacionados ---" >> $BUSCALOG ;
grep -EiRl "$buscacliente|$buscaconteudo" *.cli 2>>/dev/null | sed 's/\.cli//g' >> $BUSCALOG 2>>/dev/null ; # busca palavra nos arquivos .cli
echo "--------------------------" >> $BUSCALOG ;
$(grep -Ei "$buscacliente|$buscaconteudo" *.cli >> $BUSCALOG 2>>/dev/null) ; # busca palavra nos arquivos .cli
less -i $BUSCALOG
echo "------------------------------" ;
read -rsn1 -p "Pressione ENTER para continuar" ;
echo "------------------------------" ;
}
buscafornecedor(){
echo
echo "------------------------------" ;
echo " *** Busca fornecedor ***" ;
echo "------------------------------" ;
cd $FORNECEDORDIR ; # entra no diretorio fornecedor
read -e -p "Nome do cliente: " buscafornecedor ; # pega nome do fornecedor
rm -r $BUSCALOG 2>>/dev/null ;
read -p "Buscar: " "buscaconteudo" ; # pega segundo nome da busca
echo "" > $BUSCALOG ; # apaga todo conteudo anterior da busca
echo "*** Resultados ***" >> $BUSCALOG ; # envia resultados para BUSCALOG
echo "--------------------------" >> $BUSCALOG ;
echo "--- Itens relacionados ---" >> $BUSCALOG ;
$(grep -EiRl "$buscafornecedor|$buscaconteudo" *.for 2>>/dev/null | sed 's/\.for//g' >> $BUSCALOG 2>>/dev/null) ; # busca palavra nos arquivos .for
echo "--------------------------" >> $BUSCALOG ;
$(grep -Ei "$buscafornecedor|$buscaconteudo" *.for >> $BUSCALOG 2>>/dev/null) ; # busca palavra nos arquivos .for
less -i $BUSCALOG
echo "------------------------------" ;
read -rsn1 -p "Pressione ENTER para continuar" ;
echo "------------------------------" ;
}
opcaobusca(){
echo
echo "------------------------------" ;
echo " *** Busca ***" ;
echo "------------------------------" ;
read -e -p "Produto [P] Cliente [C] Fornecedor [F] " BUSCA ;
case "$BUSCA" in
[Pp]*) buscaproduto ;;
[Cc]*) buscacliente ;;
[Ff]*) buscafornecedor ;;
*) echo "Opção Inválida"
echo "------------------------------" ;
read -rsn1 -p "Pressione ENTER para continuar" ;
echo "------------------------------" ; ;;
esac
}
#======================== Busca FIM ======================================
#======================== Altera COMEÇO ==================================
alterafornecedor(){
cd $FORNECEDORDIR
echo "------------------------------" ;
echo " *** Alterar Fornecedor ***" ;
echo "------------------------------" ;
read -e -p "Digite o nome do cliente: " "alterafornecedor" ; # pega nome do arquivo
[ -z "$alterafornecedor" ] && menu ; # se variavel é nula volta ao menu
if [ -e "$alterafornecedor.for" ]; then
echo "Deseja alterar "$alterafornecedor"? " ;
perguntacontinuar ;
cat "$alterafornecedor.for" ; # mostra conteudo do arquivo
read -p "Digite o campo que deseja alterar: " "altera1" ; # pega palavra para alterar
read -p "Digite o valor antigo: " "altera2" ; # pega segunda palavra para alterar
read -p "Digite o novo valor: " "altera3" ; # pega terceira palavra para alterar
sed -e '/'"${altera1^^}"'/ s/'"$altera2"'/'"$altera3"'/' "$alterafornecedor.for" > output.altera ; # gera output com alterações
cat output.altera ; # mostra conteudo output
echo "Deseja salvar alteração?"
perguntacontinuar
cat output.altera > "$alterafornecedor.for"
rm -r output.altera ; # apaga output
echo "******" >> $ALTERADOLOG ; # log Alterados
echo "Produto:" "$alterafornecedor.for" >> $ALTERADOLOG ; # log Alterados
echo "******" >> $ALTERADOLOG ; # log Alterados
else
echo "Arquivo "$alterafornecedor" não existe" ;
verlistafornecedor ;
fi
}
alteracliente(){
cd $CLIENTEDIR
echo "------------------------------" ;
echo " *** Alterar Cliente ***" ;
echo "------------------------------" ;
read -e -p "Digite o nome do cliente: " "alteracliente" ; # pega nome do arquivo
[ -z "$alteracliente" ] && menu ; # se variavel é nula volta ao menu
if [ -e "$alteracliente.cli" ]; then
echo "Deseja alterar $alteracliente? " ;
perguntacontinuar ;
cat "$alteracliente.cli" ; # mostra conteudo do arquivo
read -p "Digite o campo que deseja alterar: " "altera1" ; # pega palavra para alterar
read -p "Digite o valor antigo: " "altera2" ; # pega segunda palavra para alterar
read -p "Digite o novo valor: " "altera3" ; # pega terceira palavra para alterar
sed -e '/'"${altera1^^}"'/ s/'"$altera2"'/'"$altera3"'/' "$alteracliente.cli" > output.altera ; # gera output com alterações
cat output.altera ; # mostra conteudo output
echo "Deseja salvar alteração?"
perguntacontinuar
cat output.altera > "$alteracliente.cli"
rm -r output.altera ; # apaga output
echo "******" >> $ALTERADOLOG ; # log Alterados
echo "Produto:" "$alteracliente.cli" >> $ALTERADOLOG ; # log Alterados
echo "******" >> $ALTERADOLOG ; # log Alterados
else
echo "Arquivo "$alteracliente" não existe" ;
verlistacliente ;
fi
}
alteraproduto(){
cd $PRODUTODIR
echo "------------------------------" ;
echo " *** Alterar Produto ***" ;
echo "------------------------------" ;
read -e -p "Digite o nome do produto: " "alteraproduto" ; # pega nome do arquivo
[ -z "$alteraproduto" ] && menu ; # se variavel é nula volta ao menu
if [ -e "$alteraproduto.prod" ]; then
echo "Deseja alterar $alteraproduto? " ;
perguntacontinuar ;
cat "$alteraproduto.prod" ; # mostra conteudo do arquivo
read -p "Digite o campo que deseja alterar: " "altera1" ; # pega palavra para alterar
read -p "Digite o valor antigo: " "altera2" ; # pega segunda palavra para alterar
read -p "Digite o novo valor: " "altera3" ; # pega terceira palavra para alterar
sed -e '/'"${altera1^^}"'/ s/'"$altera2"'/'"$altera3"'/' "$alteraproduto.prod" > output.altera ; # gera output com alterações
cat output.altera ; # mostra conteudo output
echo "Deseja salvar alteração?"
perguntacontinuar
cat output.altera > "$alteraproduto.prod"
rm -r output.altera ; # apaga output
echo "******" >> $ALTERADOLOG ; # log Alterados
echo "Produto:" "$alteraproduto.prod" >> $ALTERADOLOG ; # log Alterados
echo "******" >> $ALTERADOLOG ; # log Alterados
else
echo "Arquivo "$alteraproduto" não existe" ;
verlistaproduto ;
fi
}
opcaoaltera(){
echo
echo "------------------------------" ;
echo " *** Alterar ***" ;
echo "------------------------------" ;
read -e -p "Produto [P] Cliente [C] Fornecedor [F] " ALTERA ;
case "$ALTERA" in
[Pp]*) alteraproduto ;;
[Cc]*) alteracliente ;;
[Ff]*) alterafornecedor ;;
*) echo "Opção Inválida"
echo "------------------------------" ;
read -rsn1 -p "Pressione ENTER para continuar" ;
echo "------------------------------" ; ;;
esac
}
#======================== Altera FIM ======================================
#======================== Relatorio COMEÇO ================================
opcaorelatorio(){
echo "------------------------------" ;
echo " *** Relatorio ***" ;
echo "------------------------------" ;
cd $PRODUTODIR
echo "" > $RELATORIOLOG ; # apaga dados relatorio
echo "Quantidade total de arquivos em $PRODUTODIR:" $(find -type f | wc -l) >> $RELATORIOLOG ;
echo "Quantidade de produtos cadastrados:" $(sed s/.prod\b/.prod\n/g $CADASTROPRODUTOLOG 2>>/dev/null | grep ".prod\b" | wc -l ) >> $RELATORIOLOG ;
echo "Quantidade total de clientes cadastrados:" $(sed s/.cli\b/.cli\n/g $CADASTROCLIENTELOG 2>>/dev/null | grep ".cli\b" | wc -l ) >> $RELATORIOLOG ;
echo "Quantidade total de fornecedores cadastrados:" $(sed s/.for\b/.for\n/g $CADASTROFORNECEDORLOG 2>>/dev/null | grep ".for\b" | wc -l ) >> $RELATORIOLOG ;
echo "Quantidade total de entrada:" $(sed s/.prod\b/.prod\n/g $ENTRADALOG 2>>/dev/null | grep ".prod\b" | wc -l ) >> $RELATORIOLOG ;
echo "Quantidade total de saída:" $(sed s/.prod\b/.prod\n/g $SAIDALOG 2>>/dev/null | grep ".prod\b" | wc -l ) >> $RELATORIOLOG ;
echo "Quantidade de produtos alterados:" $(sed s/.prod\b/.prod\n/g $ALTERADOLOG 2>>/dev/null | grep ".prod\b" | wc -l ) >> $RELATORIOLOG ;
echo "Quantidade de clientes alterados:" $(sed s/.cli\b/.cli\n/g $ALTERADOLOG 2>>/dev/null | grep ".cli\b" | wc -l ) >> $RELATORIOLOG ;
echo "Quantidade de fornecedores alterados:" $(sed s/.for\b/.for\n/g $ALTERADOLOG 2>>/dev/null | grep ".for\b" | wc -l ) >> $RELATORIOLOG ;
echo "Quantidade de produtos excluidos:" $(sed s/.prod\b/.prod\n/g $EXCLUIDOLOG 2>>/dev/null | grep ".prod\b" | wc -l ) >> $RELATORIOLOG ;
echo "Quantidade de clientes excluidos:" $(sed s/.cli\b/.cli\n/g $EXCLUIDOLOG 2>>/dev/null | grep ".cli\b" | wc -l ) >> $RELATORIOLOG ;
echo "Quantidade de fornecedores excluidos:" $(sed s/.for\b/.for\n/g $EXCLUIDOLOG 2>>/dev/null | grep ".for\b" | wc -l ) >> $RELATORIOLOG ;
deletasoma 2>>/dev/null ;
cd $PRODUTODIR ;
sed -n -e 's/^.*QUANTIDADE: //p' *.prod >> $SOMA ; paste -sd+ $SOMA | bc >> $SOMAF ;
echo "Quantidade total de produtos:" $(cat $SOMAF) >> $RELATORIOLOG ;
rm -r $SOMAF 2>>/dev/null
sed -n -e 's/^.*VALOR R$: //p' *.prod >> $SOMA2 ; paste -sd+ $SOMA2 | bc >> $SOMAF ;
echo "Soma de valor total unitario de cada produtos:" $(cat $SOMAF) >> $RELATORIOLOG ;
rm -r $SOMAF 2>>/dev/null
sed -n -e 's/^.*CUSTO R$: //p' *.prod >> $SOMA3 ; paste -sd+ $SOMA3 | bc >> $SOMAF ;
echo "Soma de custo unitaria de cada produtos:" $(cat $SOMAF) >> $RELATORIOLOG ;
less -iC $RELATORIOLOG ;
deletasoma 2>>/dev/null ;
}
#======================== Relatorio FIM ===================================
excluifornecedor(){
cd $FORNECEDORDIR ;
echo "------------------------------" ;
echo " *** Excluir Fornecedor ***" ;
echo "------------------------------" ;
read -e -p "Digite o nome do produto: " "nomeexcluir" ;
[ -z "$nomeexcluir" ] && menu ; # se variavel é nula volta ao menu
if [ -e "$nomeexcluir".for ]; then
echo "Deseja excluir $nomeexcluir?" ;
perguntacontinuar ;
rm -r "$nomeexcluir.for" ;
echo "******" >> $EXCLUIDOLOG ; # log Excluidos
echo "Produto:" "$nomeexcluir.for" >> $EXCLUIDOLOG ; # log Excluidos
echo "******" >> $EXCLUIDOLOG ; # log Excluidos
echo "Arquivo "$nomeexcluir" excluido com sucesso"
read -rsn1 -p "Pressione ENTER para continuar" ;
menu ;
else
echo "Arquivo "$nomeexcluir" não existe" ;
verlistafornecedor ;
fi
}
excluicliente(){
cd $CLIENTEDIR ;
echo "------------------------------" ;
echo " *** Excluir Cliente ***" ;
echo "------------------------------" ;
read -e -p "Digite o nome do produto: " "nomeexcluir" ;
[ -z "$nomeexcluir" ] && menu ; # se variavel é nula volta ao menu
if [ -e "$nomeexcluir".cli ]; then
echo "Deseja excluir $nomeexcluir?" ;
perguntacontinuar ;
rm -r "$nomeexcluir.cli" ;
echo "******" >> $EXCLUIDOLOG ; # log Excluidos
echo "Produto:" "$nomeexcluir.cli" >> $EXCLUIDOLOG ; # log Excluidos
echo "******" >> $EXCLUIDOLOG ; # log Excluidos
echo "Arquivo "$nomeexcluir" excluido com sucesso"
read -rsn1 -p "Pressione ENTER para continuar" ;
menu ;
else
echo "Arquivo "$nomeexcluir" não existe" ;
verlistacliente ;
fi
}
excluiproduto(){
cd $PRODUTODIR ;
echo "------------------------------" ;
echo " *** Excluir Produto ***" ;
echo "------------------------------" ;
read -e -p "Digite o nome do produto: " "nomeexcluir" ;
[ -z "$nomeexcluir" ] && menu ; # se variavel é nula volta ao menu
if [ -e "$nomeexcluir".prod ]; then
echo "Deseja excluir $nomeexcluir?" ;
perguntacontinuar ;
rm -r "$nomeexcluir.prod" ;
echo "******" >> $EXCLUIDOLOG ; # log Excluidos
echo "Produto:" "$nomeexcluir.prod" >> $EXCLUIDOLOG ; # log Excluidos
echo "******" >> $EXCLUIDOLOG ; # log Excluidos
echo "Arquivo "$nomeexcluir" excluido com sucesso"
read -rsn1 -p "Pressione ENTER para continuar" ;
menu ;
else
echo "Arquivo "$nomeexcluir" não existe" ;
verlistaproduto ;
fi
}
opcaoexclui(){
echo
echo "------------------------------" ;
echo " *** Excluir ***" ;
echo "------------------------------" ;
read -e -p "Produto [P] Cliente [C] Fornecedor [F] " EXCLUIR ;
case "$EXCLUIR" in
[Pp]*) excluiproduto ;;
[Cc]*) excluicliente ;;
[Ff]*) excluifornecedor ;;
*) echo "Opção Inválida"
echo "------------------------------" ;
read -rsn1 -p "Pressione ENTER para continuar" ;
echo "------------------------------" ; ;;
esac
}
#======================== Excluir FIM =====================================
#======================= Ajuda COMEÇO =====================================
opcaoajuda(){
echo -e "
------------------------------
*** Ajuda ***
------------------------------
-m Menu
-c Cadastro
-es Entrada/Saída
-i Consultar itens
-b Busca
-a Altera
-r Relatorio
-x Excluir
-h Ajuda
-v Versão
------------------------------
"
read -rsn1 -p "Pressione ENTER para continuar" ;
clear ;
}
#========================= Ajuda FIM ======================================
#======================= Menu Principal COMEÇO ===========================
# função: menu principal
menu() {
while true $MENUPRINCIPAL != "menuloop"
do
trocavirgula ;
clear ;
cat<<EOF
==============================
Estok SH 1.2b
------------------------------
Entre com uma opção:
1 ) Cadastro
2 ) Entrada/Saída
3 ) Consultar iténs
4 ) Buscar
5 ) Alterar
6 ) Relatório
7 ) Excluir
8 ) Ajuda
Q ) Sair
------------------------------
EOF
echo "Digite a opção desejada"
read -e -p "Menu: " opcaomenu # pega opção menu
echo "------------------------------"
case "$opcaomenu" in # variavel do menu para entar
1)
opcaocadastro ; ;;
2)
opcaoentradasaida ; ;;
3)
opcaoconsultaritens ; ;;
4)
opcaobusca ; ;;
5)
opcaoaltera ; ;;
6)
opcaorelatorio ; ;;
7)
opcaoexclui ; ;;
8)
opcaoajuda ; ;;
Q|q)
exit 0 ; ;;
esac
done
}
#======================= Menu Principal FIM ==============================
#======================== Parametros COMEÇO ===============================
# case: parametros
case $1 in
"-m")
menu ; ;;
"-c")
opcaocadastro ; ;;
"-es")
opcaoentradasaida ; ;;
"-i")
opcaoconsultaritens ; ;;
"-b")
opcaobusca ; ;;
"-a")
opcaoaltera ; ;;
"-r")
opcaorelatorio ; ;;
"-x")
opcaoexclui ; ;;
"-h")
opcaoajuda ; ;;
"-v")
echo "Estok SH versão - 1.2b" ; ;;
*) echo -e "Opção inválida! \nentre com parametro -h para ajuda"
exit 1 ; ;;
esac
#======================== Parametros FIM =================================
Script contra ataques de Brutal Force por SSH.
Shell Script / Perl para sincronizar base de usuários do AD com o Zimbra
BACKUP para micros com Windows XP utilizando o share administrativo ( C$ )
Script para tirar relatorios de acesso discado
Nenhum comentário foi encontrado.
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?









