Mostrando postagens com marcador Shell. Mostrar todas as postagens
Mostrando postagens com marcador Shell. Mostrar todas as postagens
quinta-feira, 10 de dezembro de 2020

Como criar aplicações gráficas com ShellScript e GtkDialog

0 comentários

 GtkDialog (ou gtkdialog) é um pequeno utilitário para fácil e rápida construção de interfaces gráficas. Ele pode ser usado para criar caixas de diálogo para quase todas as linguagens de programação interpretadas e compiladas, o que é uma característica muito atraente, pois o desenvolvedor não tem que aprender várias bibliotecas gráficas para cada linguagem de programação que utilizar. Neste artigo, saiba como criar aplicações gráficas com ShellScript e GTKDialog.

Instalação do GTKDialog no Linux

Você pode verificar se há o pacote gtkdialog nos repositórios da sua distro linux, ou, se preferir, pode baixar o código fonte.

Para compilar execute os comandos abaixo:

$ wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/gtkdialog/gtkdialog-0.8.3.tar.gz

$ tar -xvf gtkdialog-0.8.3.tar.gz

$ cd gtkdialog-0.8.3/

$ ./configure

$ make

$ sudo make install

Criando o primeiro programa:

Vamos criar uma pequena aplicação gráfica utilizando GtkDialog + ShellScript:

#!/bin/bash
export MAIN_DIALOG='
<window title="Meu primeiro programa" icon-name="gtk-about" resizable="true" width-request="300" height-request="100">
<vbox>
  <hbox homogeneous="true">
    <frame Executar programa>
      <hbox homogeneous="false" space-expand="true" space-fill="true">
        <entry>
          <variable>ENTRY</variable>
          <action signal="activate">$ENTRY</action>
          <action signal="activate" type="exit">EXIT</action>
        </entry>
        <button>
          <label>Executar</label>
          <action type="command">$ENTRY</action>
          <action function="exit">EXIT</action>
        </button>
      </hbox>
    </frame>
  </hbox>
</vbox>
</window>'
case $1 in
  -d | --dump) echo "$MAIN_DIALOG" ;;
  *) gtkdialog --program=MAIN_DIALOG --center ;;
esac

Explicando o código resumidamente:

OBSERVAÇÃO: A sintaxe para criação da interface segue o padrão XML, portanto as TAGS devem ser abertas e fechadas corretamente.

  • #!/bin/bash: A primeira linha do script, representa qual programa será utilizado para interpretar o código
  • export MAIN_DIALOG=…: Variável que contém toda a estrutura da interface gráfica, o nome da variável pode ser qualquer um
  • <window>:
    Tag que inicia a aplicação. Nela pode conter atributos como título,
    tamanho da janela, ícone da janela, entre outras opções
  • <vbox>:
    Caixa vertical (Vertical box) usada como container para outros objetos
    como caixas horizontais (hbox), botões (button), etc…
  • <hbox>: Caixa horizontal (Horizontal box) também usada como container para outros objetos
  • <button>: Tag para criação de botões
  • <label>: Atribui um nome para o objeto
  • <action>:
    Ação que será realizada dependendo do sinal e do tipo de ação que o
    objeto receberá. Pode ser executado um comando do shell, execução de
    programas (que se trata do nosso caso), execução de outras variáveis,
    etc…
  • </nome_da_tag>: Fechamento da tag aberta anteriormente, assim como no XML.

As possibilidades são imensas, você pode fazer desde aplicações gráficas simples, até mais avançadas como um player de música, um editor de textos, e assim por diante. Segue também página com diversos exemplos de aplicações com GtkDialog:


Gtkdialog Examples (sourceforge.net)

Continue reading →
terça-feira, 8 de outubro de 2019

Obtenha Explicações de Comandos do Shell pelo Terminal

0 comentários
Fonte: https://terminalroot.com.br/2019/10/obtenha-explicacoes-de-comandos-do-shell-pelo-terminal.html

Além do Explain Shell e também o Bash Snippets que nós já abordamos aqui. Existe algumas ferramentas ainda mais completas e que estão disponíveis para ainda mais ambientes como: Docker, Git e entre diversos outros.
Estou me referindo ao KMDR e alternativamente também ao Cheat.

Instalando o KMDR

O kmdr fornece explicações de comando para centenas de programas, incluindo git, docker, kubectl, npm, go e programas mais diretos, como os incorporados ao bash.
Para instalar você primeiramente precisa do npm que é o gerenciador de pacotes do Node.js . Na sua distro você pode instalar assim:
emerge nodejs # Gentoo, Funtoo e similares
apt install nodejs # Debian, Ubuntu e Linux Mint
pkg install nodejs # FreeBSD
pacman -S nodejs # Arch Linux, Manjaro e similares
yum install nodejs # Red Hat, CentOS, Fedora(dnf tb)
O npm é automáticamente disponibilizado quando você instala o Node.js . Agora basta instalar o KMDR com o seguinte comando:
sudo npm install kmdr@latest --global

Utilizando

Se você rodar o comando puro kmdr você já obterá uma ajuda rápida de utilização, mas a utilização básica seria mais ou menos assim:
Suponhamos que você deseja saber o que o comando extenso: find $HOME -type f -iname "*.txt" -exec cp {} . \; faz e o que cada parte desse comando representa.
Então você rodaria o comando kmdr explain e em seguinda colaria/digitaria o comando, a saída seria similar a imagem abaixo:
kmdr explain
Caso queira mais detalhes e em português você pode traduzir as saídas com o comando transhttps://terminalroot.com.br/2019/10/traduza-rapidamente-textos-via-linha-de-comando.html . Exemplo abaixo:
kmdr | trans -b
Uso: kmdr [opções] [comando]

O cliente CLI para explicar comandos complexos do shell.

O kmdr fornece explicações de comando para centenas de programas, incluindo git, docker, kubectl, npm, go e programas mais diretos, como os incorporados ao bash.

Opções:
-v, --version gera o número da versão
-h, --help informações de uso da saída

Comandos:
Explique | e Explique um comando shell
 
Se quiser testar online clique nesse link → http://demo.kmdr.sh/ 
 
 

Cheat como mais uma alternativa

Assim como o KMDR , você também pode usar o Cheat, ele é instalável via pip que por sua vez também é uma ferramenta de gerenciamento de pacotes Python , você pode instalar o pip assim na sua distro:
emerge dev-python/pip # Gentoo, Funtoo e similares
apt install python-pip # Debian, Ubuntu e Linux Mint
pkg install python-pip # FreeBSD
pacman -S python-pip # Arch Linux, Manjaro e similares
yum install python-pip # Red Hat, CentOS, Fedora(dnf tb)
Após instaldo você pode instalar o Cheat com o comando:
sudo pip install cheat
Observação: Tanto o npm quanto o pip podem ser ignorados o sudo , desde que seu sistema esteja configurado para isso, verifique as configurações de permissão do seu sistema para mais informações. Exemplo:
pip3 install cheat --user
Note: que utilizei o comando pip3 , ou seja, o pacote na sua distro pode ser: python-pip3 ou algo do tipo.

Utilizando o Cheat

Supondo que você deseja dicas de como extrair, compactar … pacotes tar , rode assim: cheat tar, a saída será mais ou menos a abixo
marcos@gentoo ~ $ cheat tar
# To extract an uncompressed archive:
tar -xvf /path/to/foo.tar

# To create an uncompressed archive:
tar -cvf /path/to/foo.tar /path/to/foo/

# To extract a .gz archive:
tar -xzvf /path/to/foo.tgz

# To create a .gz archive:
tar -czvf /path/to/foo.tgz /path/to/foo/

# To list the content of an .gz archive:
tar -ztvf /path/to/foo.tgz

# To extract a .bz2 archive:
tar -xjvf /path/to/foo.tgz

# To create a .bz2 archive:
tar -cjvf /path/to/foo.tgz /path/to/foo/

# To extract a .tar in specified Directory:
tar -xvf /path/to/foo.tar -C /path/to/destination/

# To list the content of an .bz2 archive:
tar -jtvf /path/to/foo.tgz

# To create a .gz archive and exclude all jpg,gif,... from the tgz
tar czvf /path/to/foo.tgz --exclude=\*.{jpg,gif,png,wmv,flv,tar.gz,zip} /path/to/foo/

# To use parallel (multi-threaded) implementation of compression algorithms:
tar -z ... -> tar -Ipigz ...
tar -j ... -> tar -Ipbzip2 ...
tar -J ... -> tar -Ipixz ...
marcos@gentoo ~ $ 
Ou seja, é bem simples o uso, mas se quiser mais exemplos, recomendo você rodar o cheat --help e visitar a página do mesmo: https://github.com/cheat/cheat

Dicas adicionais

Há um tempo atrás nós abordamos sobre o Bash Snippets como informamos no início e o mesmo possui também um cheat, além de diversaaaaas outras ferramentas, para mais informações, assista o vídeo abaixo:


 
Continue reading →
quarta-feira, 31 de julho de 2019

10 Useful Chaining Operators in Linux with Practical Examples

0 comentários
Continue reading →
quarta-feira, 8 de maio de 2019

Shell Script: tratamento de argumentos e opções

0 comentários
Na grande maioria das vezes, a linguagem shell script é usada para criar uma sequência de comandos que automatizam uma tarefa. Nisso, ela é extremamente eficiente e rápida. Combinar comandos é uma grande vantagem que o jeito UNIX de ser nos trouxe: várias ferramentas que fazem tarefas básicas, especializadas, e que quando se juntam realizam grandes feitos trabalhando juntas. Mas isso nunca impediu que se criasse também programas completos em shell script.
Uma característica para deixar um shell-script mais robusto e menos “sequencial/batch-mode” é o tratamento de argumentos. No meu clássico tutorial Programando em Shell-Script, o tópico Variáveis Especiais nos traz os primeiros itens que devemos aprender para o tratamento de argumentos. Existem variáveis especiais que tratam os argumentos passados para um programa ou uma função. Estes são:
  • $0 – Retorna o nome do script que foi executado
  • $N – Onde N é um número, corresponde ao argumento passado (1 = primeiro argumento, 2 = segundo argumento, 3 = terceiro argumento, etc)
  • $* – Retorna todos os argumentos de uma vez.
  • $# – Retorna a quantidade de argumentos passado para o script. (argc)
Vejamos agora um shell-script exempo que faz uso de todos esses argumentos:
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
#!/bin/bash
 
if [ $# -lt 1 ]; then
   echo "Faltou utilizar pelo menos um argumento!"
   exit 1
fi
 
echo "Numero de argumentos: $#"
 
COUNT=0
for ARG in $*; do
   COUNT=`expr $COUNT + 1`
   echo "Argumento $COUNT: $ARG"
done
As linhas 3 a 6 verificam se a quantidade de argumentos ($#) é menor (-lt – less than) que 1. Ou seja, se o usuário não chamou o programa com nenhum argumento, ele imprime um erro e sai do programa com status 1.
A linha 8 mostra quantos argumentos foram utilizados, usando novamente o $#.
O resto das linhas, 10 a 14, usam o $* com um laço for e um contador para mostrar quais foram os argumentos.
Executando agora este script sem argumentos:
$ ./tmp.sh
Faltou utilizar pelo menos um argumento!
Agora executando com dois argumentos:
$ ./tmp.sh naosei testando
Numero de argumentos: 2
Argumento 1: naosei
Argumento 2: testando
E agora com 4 argumentos:
$ ./tmp.sh a b c d
Numero de argumentos: 4
Argumento 1: a
Argumento 2: b
Argumento 3: c
Argumento 4: d
Bem simples né?

Argumentos como opções e seus valores

Algo comum que vemos nos programas são opções. Opções não deixam de ser argumentos para um programa, mas eles tem um significado especial. Do tipo: Se a opção -d existir, ativar durante o programa o modo de depuração. Se houver um -h, então mostre uma ajuda e não faça mais nada. Se houver um -v mostre a versão, e por aí vai.
Exemplo:
?
01
02
03
04
05
06
07
08
09
10
11
#!/bin/bash
 
case $1 in
   "-h") echo "Isto seria uma ajuda... Mas fiquei com preguiça de escrevê-la."
         ;;
   "-v") echo "Versão 666."
         ;;
   *) echo "Opção inválida!"
      exit 1
      ;;
esac
Exemplos do uso do script:
$ ./tmp.sh -h
Isto seria uma ajuda... Mas fiquei com preguiça de escrevela.
 
$ ./tmp.sh -v
Versão 666.
 
$ ./tmp.sh -O
Opção inválida!
 
$ ./tmp.sh
Opcao invalida!
Com isso a gente resolve um problema e cria mais outros dois…
  • E se o usuário colocar as duas opções? Só uma funcionaria.
  • E se uma das opções precisasse de um valor? Estilo “-f arquivo.log” gravaria um arquivo de log com as operações.
Poderíamos escrever vários algoritmos que verificassem cada um de todos os argumentos, testasse se fosse um ou outro, utilizasse as opções… Mas felizmente não precisamos fazer nada disso! O bash conta com uma função interna que trata os argumentos: o famoso getopts.

Utilizando o getopts para tratar tratar argumentos e opções

Seguindo a mesma linha de raciocínio, vamos logo para um exemplo de programa. Supondo que queiramos um shell-script que faça isso:
  • Caso a opção -h seja usada, mostra a ajuda e sai do programa.
  • Caso a opção -v seja usada, mostra a versão e sai do programa.
  • Caso a opção -o seja usada, grava um arquivo de log com as operações efetuadas e resultados.
  • Caso a opção -u seja usada, mostra o resultado do comando “uname -a”
  • Caso a opção -m seja usada, mostra o resultado do comando “free -m”
  • Caso a opção -s seja usada, mostra o resultado do comando “swap -s”
Note que apenas as opções -h e -v saem do programa após a execução. Agora vamos ao código:
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#!/bin/bash
 
function PrintUsage() {
   echo "Uso: `basename $0` <-umsf> [-ohv]"
   exit 1
}
 
while getopts "hvo:umsf" OPTION
do
   case $OPTION in
      h) PrintUsage
         ;;
      v) echo "`basename $0` versao 666."
         exit
         ;;
      o) ARQUIVO_LOG=$OPTARG
         ;;
      u) DO_UNAME=1
         ;;
      m) DO_FREE=1
         ;;
      s) DO_SWAPON=1
         ;;
      ?) PrintUsage
         ;;
   esac
done
shift $((OPTIND-1))
 
if [ -z "$DO_UNAME" ] && [ -z "$DO_FREE" ] && [ -z "$DO_SWAPON" ] && [ -z "$DO_FDISK" ]; then
   PrintUsage
fi
 
if [ "$ARQUIVO_LOG" ]; then   echo "Execucao iniciada em `date`." >> $ARQUIVO_LOG
 
   if [ "$DO_UNAME" == 1 ]; then
      uname -a >> $ARQUIVO_LOG
   fi
 
   if [ "$DO_FREE" == 1 ]; then
      free -m >> $ARQUIVO_LOG
   fi
 
   if [ "$DO_SWAPON" == 1 ]; then
      swapon -s >> $ARQUIVO_LOG
   fi
else
   echo "Execucao iniciada em `date`."
   if [ "$DO_UNAME" == 1 ]; then
      uname -a
   fi
 
   if [ "$DO_FREE" == 1 ]; then
      free -m
   fi
 
   if [ "$DO_SWAPON" == 1 ]; then
      swapon -s
   fi
fi
O interessante para nós são as linhas 8 a 28. O laço while getopts começa a tratar todos os argumentos. A cada iteração do laço, ele coloca a letra da opção na variável $OPTION.
Note que para cada opção que precisamos, colocamos uma letra no primeiro argumento do getopts:
?
1
while getopts "hvo:umsf" OPTION
Note também que depois da letra o temos um dois pontos (:). Esse dois pontos significa que logo após a opção -o, o usuário precisa fornecer um valor. Este valor é automaticamente armazenado na variável $OPTARG.
Dessa maneira, podemos executar esse programa de diversas formas:
./tmp.sh -o arquivo.log -u
(executa o "uname -a" e grava no arquivo arquivo.log)
 
./tmp.sh -um
(executa os comandos "uname -a" e "free -m")
 
./tmp.sh -m -s -u
(executa os comandos "free -m", "swapon -s" e "uname -a")
Ou seja, não importa a ordem, o getopts vai reconhecer e executar as ações de acordo com a opção especificada.
E se você colocar uma opção que não está contemplatada… O “?” do case irá ser executado, por exemplo:
$ ./tmp.sh -a
./tmp.sh: illegal option -- a
Uso: tmp.sh <-umsf> [-ohv]
E dessa forma fica bem fácil de entender e usar o getopts :) Depois que o laço é todo feito e executado em todos os argumentos (no meu caso, preferi apenas configurar variáveis para cada opção e tratá-las depois), ele executa o comando que está na linha 28:
?
1
shift $((OPTIND-1))
Este comando faz com que os argumentos de opções sejam “comidos“, até que não sobre nenhuma opção. Em outras palavras, os argumentos representados pelas variáveis $N só serão aqueles que não pertençam a nenhuma opção. Exemplo:
./tmp.sh -u -o arquivo.log -m argumento1 argumento2
Nesse caso, o $1 seria o argumento1 e o $2 seria o argumento2, quando na verdade, sem o shift, eles seriam respectivamente o $5 e $6.
Como nem tudo é perfeito, a função getopts do bash não aceita opções longas (–nome-da-opcao), ou seja, voce só pode utilizar uma letra como opção. Represente bem suas opções com as letras! :)

Argumentos dentro de funções

Se dentro de um shell-script temos uma função, essa função é enxergada pela shell como se fosse um comando. Nesse sentido, dentro de uma função as variáveis $N definidas pelo programa não funcionarão. Exemplo:
?
01
02
03
04
05
06
07
08
09
10
11
12
13
#!/bin/bash
 
function Dummy() {
   echo "Numero de argumentos: $#"
 
   COUNT=0
   for ARG in $*; do
      COUNT=`expr $COUNT + 1`
      echo "Argumento $COUNT: $ARG"
   done
}
 
Dummy
Não importa o que você executar com o script acima, a saída será sempre a mesma: 0 números de argumentos, como mostrado a seguir.
$ ./tmp.sh
Numero de argumentos: 0
 
$ ./tmp.sh naosei temporario
Numero de argumentos: 0
 
$ ./tmp.sh a b c d e f g
Numero de argumentos: 0
Para a função Dummy, as variáveis especiais dos argumentos funcionam apenas para a função e não para o programa inteiro. É como se as variáveis fossem locais, e não globais. Vamos então substituir a linha da chamada da função Dummy (linha 13) por:
?
1
Dummy a b c d
E tentar executar novamente:
$ ./tmp.sh
Numero de argumentos: 4
Argumento 1: a
Argumento 2: b
Argumento 3: c
Argumento 4: d
Sabendo disso, não se percam na hora de usar os argumentos dentro das funções e lembrem-se que isto pode ser útil na hora de implementar diversas funções dentro de um script. Um bom exemplo disso é implementar a função PrintUsage que usamos anteriormente para, além de mostrar uma mensagem de uso, mostrar também uma mensagem de erro personalizada:
?
1
2
3
4
5
function PrintUsage() {
   [ "$1" ] && echo -ne "Erro: $1\n"
   echo "Uso: $(basename $0)  <-umsf> [-ohv]"
   exit 1
}
Agora é so chamar a função como…
PrintUsage "Faltando parâmetros."
PrintUsage "Opção inválida."
PrintUsage "No donut for you."
Use a criatividade de um programador (afinal, programação é arte) e comece a aprimorar suas ferramentas bash! :)

Fonte: http://www.devin.com.br/shell-script-tratamento-de-argumentos-e-opcoes/
Continue reading →
sexta-feira, 26 de abril de 2019

Como criar pacotes .deb

0 comentários
Pacotes .deb facilitam a instalação de aplicativos, aqui no blog tem dois Posts que demonstram como “Instalar o Eclipse Galileo e o Aptana”, mas tudo poderia ser desprezado, se eu criasse um pacote .deb e disponibilizasse pra download, mas essa não é a idéia desse blog.
Os pacotes podem ser instalado em Debian e Debian-Likes (Ubuntu, Linux Mint, Backtrack 5…), que possuem o mesmo caminho para os diretórios dos aplicativos.
É bem simples criar pacotes .deb, vamos começar então
  • 1 - crie uma pasta onde você desejar que será o nome do programa, aqui eu vou criar a pasta terminalroot dentro da minha Área de Trabalho.
  • 2 - Depois crie dentro da sua pasta uma pasta em maiúsculo, com o nome DEBIAN
  • 3 - dentro da pasta DEBIAN, crie um arquivo com o nome de control, sem extensão.
  • 4 - abra esse arquivo com seu editor de texto(gEdit por exemplo) e preencha com o código abaixo

Package:terminalroot
Version: 0.1
Priority:
Architecture: all
Essential:
Depends:
Pre-depends:
Suggests:
Installed-Size:
Maintainer: Marcos da B. M. Oliveira
Conflicts:
Replaces:
Provides:
Description: Acesse o blog terminalroot.com.br e descubra como criar pacotes .deb
No código acima, as linhas que são obrigatórias, estão preenchidas, porém algumas linhas como Depends, por exemplo, se você preencher com pacotes necessários para o funcionamento do programa o GDebi-Installer não instalará se não houver estas dependências, porém com os campos acima mencionados já podemos instalar o programa pelo GDebi-Installer.
Agora vamos ao programa, se você baixou um tarball e não quer perder o tempo copiando arquivos pra dentro de pastas…você pode criar um .deb e executá-lo, ou até mesmo, dar dois cliques nele, se o pacote foi criado com o root, ele pedirá a senha de root.
  • 5 - Dentro da pasta que você criou que aqui estou chamando de terminalroot, crie as diretivas que você deseja, por exemplo, crie uma pasta com o nome “usr”, dentro de “usr”, crie uma pasta com o nome “bin” e dentro de “bin“(ISSO SERÁ O MESMO DE VOCÊ INFORMAR QUAIS OS CAMINHOS NO SEU COMPUTADOR QUE DESEJA PARA ONDE OS ARQUIVOS SEJAM COPIADOS) coloque um arquivo, sem extensão com esse código abaixo por exemplo

#!/bin/sh
echo "Acesse: terminalroot.com.br e descubra uma pá de coisa!"
E salve com o nome terminalroot, lembrando que logo após isso dê permissão de execução pra esse arquivo

chmod +x terminalroot
No diretório que será criado o .deb, vc também pode criar as pastas e sub-pastas pelo terminal, assim

mkdir -p usr/bin
O “usr” não pode ter “/” na frente e você deve estar dentro do diretório terminalroot, pois se se fizer /usr , será criado, se houver permissão, dentro do “usr” do seu computador.Você também pode criar um ícone no painel do Gnome, é só criar a pasta que ficará a imagem no seu computador e a imagem, exemplo

mkdir opt/
cp imagem.jpg terminalroot/opt
E depois criar o icone que aparecerá no painel, exemplo, terminalroot.desktop, dae teria essa configuração dentro do arquivo

[Desktop Entry]
Name=Marcos Pinguim
Icon=/opt/terminalroot.jpg
Type=Application
Categories=GNOME;GTK;Utility;TextEditor;
Exec=terminalroot
StartupNotify=false
Terminal=false
Para isso é necessário haver o carregamento do gtk na execução do programa, que não será esse caso, somente se você digitar no terminal “terminalroot”, obterá o texto do salvo no arquivo usr/bin/terminalroot, e salvará esse arquivo terminalroot.desktop dentro da pasta que será criado o pacote .deb

mkdir -p

  • 6 - depois de criar a pasta DEBIAN; o arquivo control; as pasta na raiz da pasta que será copiado os arquivos, e pôr os arquivos que serão copiados dentro das suas respectivas páginas, basta agora “compactar” em .deb

dpkg-deb -b terminalroot/ terminalroot.0.1.deb
E o pacotes será criado.Agora instale-o, ou dando dois cliques(ou abrindo com o Gdebi-installer), ou pelo terminal

dpkg -i terminalroot.0.1.deb
Todas as tarefas restantes serão feitas automaticamente, e o pacote será instalado.Agora vá ao terminal e digite “terminalroot”, terá o texto pré-configurado para responder, se fosse um software seria executado, se houve Gtk pre-configurada abriria a janela, até mesmo pelo ícone pre-programado, se você for no painel
Aplicativos > Acessórios
Verá a imagem lá, entre as opções dos aplicativos, porém se clicar não fará nada.Para remover, basta

apt-get remove terminalroot
Todos os arquivos copiados serão remvidos, inclusive as imagens.
Pronto, é só isso, espero que gostem e comentem.
Continue reading →

Busca CEP com Shell Script

0 comentários
Pesquisando CEP via Shell Script 

Script simples para saber o Estado, Cidade, Bairro e Logradouro de um determinado CEP, explicações segue nos comentários do código.

http://cep.republicavirtual.com.br/web_cep.php?cep=06765000&formato=xml



 
#!/bin/bash
# --------------------------------------
# ./cep.sh
#
# Pesquisando CEP via Shell Script
#
# Uso: ./cep.sh [CEP]
#
# Ex.: ./cep.sh 41630635
#
# Autor: Marcos da B. M. Oliveira , www.terminalroot.com.br
# Desde: Dom 25 Ago 2013 13:11:36 BRT
# Licença: GPL
# --------------------------------------
# se não informa o CEP o script pára aqui
[ -z $1 ] &amp;&amp; echo -e '\e[40;31;1mÉ necessário informar o CEP\033[m' &amp;&amp; exit 1

#url da pesquisa
url='http://cep.republicavirtual.com.br/web_cep.php?cep'

# baixa o código fonte do xml e grava no arquivo cep.txt
lynx -source $url=$1 > cep.txt

# converte o arquivo para utf-8
iconv -f=iso_8859-1 -t=utf-8 cep.txt > cep2.txt

# limpa todas as tags XML
sed 's/]*>//g' cep2.txt > cep.txt

# remove o arquivo da transformação do encode
rm -rf cep2.txt

# apaga da linha 1 à 4 , pois são desnecessárias
sed -i '1,4d' cep.txt

# apaga todas as linhas em branco
sed -i '/^$/d' cep.txt

# imprime(com cores) os dados do arquivo gerado pelo dump, personalizado.
echo -e "\e[40;37;1m CIDADE-UF:\033[m \e[40;33;1m"$(sed -n '2p' cep.txt) $(sed -n '1p' cep.txt) "\033[m"
echo -e "\e[40;37;1m BAIRRO:\033[m \e[40;33;1m"$(sed -n '3p' cep.txt) "\033[m"
echo -e "\e[40;37;1m LOGRADOURO:\033[m \e[40;33;1m"$(sed -n '4p' cep.txt) $(sed -n '5p' cep.txt) "\033[m"

# remove o arquivo
rm -rf cep.txt


 Fonte: http://www.terminalroot.com.br/2013/08/pesquisando-cep-via-shell-script.html
Continue reading →
quinta-feira, 18 de abril de 2019

Shell Script: repetição e função

0 comentários
Uma estrutura de repetição, também conhecida como loop ou laço, é uma estrutura de desvio do fluxo de controle presente em linguagens de programação que realiza e/ou repete diferentes algoritmos/ações dependendo se uma condição é verdadeira ou falsa. Vejamos os comandos while, until e for.
While
Os comandos são executados enquanto a condição for verdadeira. No exemplo a seguir, enquanto o contador for diferente (“ne” significa “not equal”) de 4, será imprimida na tela uma mensagem, será aguardado 1 segundo e atualizado o contador:
For
O laço for executa uma ação até que uma condição seja atendida. No exemplo abaixo, cada linha do arquivo subs.csv é lida (através do comando “cat” e impressa usando “echo”) até o final do arquivo e as letras maiúsculas são substituídas por minúsculas, mandando a saída para o arquivo subestacoes.csv:
Veja esse outro exemplo, onde o for serve para varrer todos os arquivos com extensão “.csv” e pega partes do nome do arquivo para criar pastas e mover os arquivos para esses novos diretórios:
Funções
Uma forma de repetir comandos é através do uso de funções. A função é um bloco de código que pode ser invocado pelo resto do script apenas escrevendo o nome da função. Ela deve ser escrita antes da rotina principal (ou escreva a rotina principal dentro de outra função e chame-a depois). A função não recebe parâmetros de entrada, assim a função deve ser chamada e em seguida incluir a variável (ou variáveis) a ser utilizada na função, enquanto que na função deve-se usar “$1” para receber essa variável (ou $2, $3.. para mais variáveis). Veja esse exemplo:
Um exemplo integrando tudo. O separador de campo é alterado para quebra de linha (e restaurado no final do script). Para todas as linhas do arquivo, são extraídos em diferentes variáveis os campos ano, mês, dia… cidade, incluído o zero na frente do número (caso tenha apenas 1 dígito, através do while), e impressos no arquivo de saída conforme a variável “novalinha”:
Fonte: https://www.monolitonimbus.com.br/shell-script-repeticao-e-funcao/
Continue reading →