Linguagem de programação: Shell Script

Acredito que seja a linguagem de programação favorita entre os administradores de sistema , e tambem pessoas como eu , que gosta de automatizar tarefas no computador para gerenciar melhor o tempo.
Com shell script você pode automatizar tarefas e criar pequenos programas. 

Vantagem do shell script:

* Nao precisam ser compilados , o codigo é interpretado , agilizando o desenvolvimento.
* Facil aprendizado para quem tem familiaridade com a linha de comandos (Unix , Linux , BSD’s , etc…).
* Possibilidade de inserir em paginas web atraves de CGI.

Alguns comandos:

Comando: echo

Descrição: Esse comando serve para imprimir uma mensagem na saida padrão que geralmente é a tela.

Exemplo:

echo “Pinguinautas invadem a Terra !!!”

Comando: ls

Descrição: Lista os arquivos do diretório atual.

Algumas opções: ls -l

Lista os arquivos do diretório atual em formato detalhado exemplo abaixo:

rafael@debian:/bin$ ls -l
total 4244
-rwxr-xr-x 1 root root 700492 Mai 12 2008 bash
-rwxr-xr-x 3 root root 26292 Ago 5 2008 bunzip2
-rwxr-xr-x 1 root root 376108 Set 7 2008 busybox
-rwxr-xr-x 3 root root 26292 Ago 5 2008 bzcat
lrwxrwxrwx 1 root root 6 Mai 4 09:28 bzcmp -> bzdiff
-rwxr-xr-x 1 root root 2140 Ago 5 2008 bzdiff
lrwxrwxrwx 1 root root 6 Mai 4 09:28 bzegrep -> bzgrep
-rwxr-xr-x 1 root root 4874 Ago 5 2008 bzexe
lrwxrwxrwx 1 root root 6 Mai 4 09:28 bzfgrep -> bzgrep
-rwxr-xr-x 1 root root 3642 Ago 5 2008 bzgrep
-rwxr-xr-x 3 root root 26292 Ago 5 2008 bzip2
-rwxr-xr-x 1 root root 8156 Ago 5 2008 bzip2recover
lrwxrwxrwx 1 root root 6 Mai 4 09:28 bzless -> bzmore
-rwxr-xr-x 1 root root 1297 Ago 5 2008 bzmore
-rwxr-xr-x 1 root root 26860 Abr 4 2008 cat
-rwxr-xr-x 1 root root 45344 Abr 4 2008 chgrp
-rwxr-xr-x 1 root root 42744 Abr 4 2008 chmod
-rwxr-xr-x 1 root root 47356 Abr 4 2008 chown
-rwxr-xr-x 1 root root 69284 Abr 4 2008 cp
-rwxr-xr-x 1 root root 109260 Abr 3 2008 cpio
-rwxr-xr-x 1 root root 55052 Abr 4 2008 date
-rwxr-xr-x 1 root root 47892 Abr 4 2008 dd
-rwxr-xr-x 1 root root 45016 Abr 4 2008 df
-rwxr-xr-x 1 root root 92312 Abr 4 2008 dir
-rwxr-xr-x 1 root root 4428 Abr 28 2008 dmesg
-rwxr-xr-x 1 root root 8592 Dez 27 2007 dnsdomainname
-rwxr-xr-x 1 root root 24228 Abr 4 2008 echo
-rwxr-xr-x 1 root root 40260 Nov 15 2008 ed
-rwxr-xr-x 1 root root 92276 Ago 31 2008 egrep
-rwxr-xr-x 1 root root 22120 Abr 4 2008 false
-rwxr-xr-x 1 root root 5668 Abr 15 2008 fgconsole
-rwxr-xr-x 1 root root 55344 Ago 31 2008 fgrep
-rwxr-xr-x 1 root root 21092 Nov 4 2007 fuser
-rwxr-xr-x 1 root root 100468 Ago 31 2008 grep
-rwxr-xr-x 2 root root 61 Jan 19 14:16 gunzip
-rwxr-xr-x 1 root root 5864 Jan 19 14:16 gzexe
-rwxr-xr-x 1 root root 54412 Jan 19 14:16 gzip
-rwxr-xr-x 1 root root 8592 Dez 27 2007 hostname
-rwxr-xr-x 1 root root 193932 Jul 27 2008 ip
-rwxr-xr-x 1 root root 13148 Jan 11 2009 kill
-rwxr-xr-x 1 root root 38652 Abr 4 2008 ln
-rwxr-xr-x 1 root root 35048 Abr 15 2008 loadkeys
-rwxr-xr-x 1 root root 35236 Nov 14 2009 login
-rwxr-xr-x 1 root root 92312 Abr 4 2008 ls
-rwxr-xr-x 1 root root 4164 Abr 4 2008 lsmod
-rwxr-xr-x 1 root root 29344 Abr 4 2008 mkdir
-rwxr-xr-x 1 root root 28148 Abr 4 2008 mknod
-rwxr-xr-x 1 root root 6672 Ago 15 2008 mktemp
-rwxr-xr-x 1 root root 27424 Abr 28 2008 more
-rwsr-xr-x 1 root root 64112 Abr 28 2008 mount
-rwxr-xr-x 1 root root 4516 Ago 12 2008 mountpoint
lrwxrwxrwx 1 root root 20 Mai 4 08:25 mt -> /etc/alternatives/mt
-rwxr-xr-x 1 root root 28236 Abr 3 2008 mt-gnu
-rwxr-xr-x 1 root root 76276 Abr 4 2008 mv
-rwxr-xr-x 1 root root 149600 Ago 26 2008 nano
lrwxrwxrwx 1 root root 20 Mai 4 08:25 nc -> /etc/alternatives/nc
-rwxr-xr-x 1 root root 20156 Jun 28 2008 nc.traditional
lrwxrwxrwx 1 root root 24 Mai 4 08:25 netcat -> /etc/alternatives/netcat
-rwxr-xr-x 1 root root 103048 Nov 16 2008 netstat
lrwxrwxrwx 1 root root 16 Mai 4 08:24 pidof -> ../sbin/killall5
-rwsr-xr-x 1 root root 30788 Dez 10 2007 ping
-rwsr-xr-x 1 root root 26616 Dez 10 2007 ping6
-rwxr-xr-x 1 root root 75724 Jan 11 2009 ps
-rwxr-xr-x 1 root root 26800 Abr 4 2008 pwd
lrwxrwxrwx 1 root root 4 Mai 4 08:24 rbash -> bash
-rwxr-xr-x 1 root root 33172 Abr 4 2008 readlink
-rwxr-xr-x 1 root root 46832 Abr 4 2008 rm
-rwxr-xr-x 1 root root 23480 Abr 4 2008 rmdir
lrwxrwxrwx 1 root root 4 Mai 4 08:25 rnano -> nano
-rwxr-xr-x 1 root root 11380 Jun 27 2008 run-parts
-rwxr-xr-x 1 root root 40468 Mar 3 2008 sed
lrwxrwxrwx 1 root root 4 Mai 4 08:24 sh -> bash
-rwxr-xr-x 1 root root 23504 Abr 4 2008 sleep
-rwxr-xr-x 1 root root 48864 Abr 4 2008 stty
-rwsr-xr-x 1 root root 27108 Nov 14 2009 su
-rwxr-xr-x 1 root root 22128 Abr 4 2008 sync
-rwxr-xr-x 1 root root 4880 Abr 28 2008 tailf
-rwxr-xr-x 1 root root 236884 Abr 16 2008 tar
-rwxr-xr-x 1 root root 5668 Jun 27 2008 tempfile
-rwxr-xr-x 1 root root 42772 Abr 4 2008 touch
-rwxr-xr-x 1 root root 22120 Abr 4 2008 true
-rwsr-xr-x 1 root root 44088 Abr 28 2008 umount
-rwxr-xr-x 1 root root 23992 Abr 4 2008 uname
-rwxr-xr-x 2 root root 61 Jan 19 14:16 uncompress
-rwxr-xr-x 1 root root 92312 Abr 4 2008 vdir
-rwxr-xr-x 1 root root 946 Jun 27 2008 which
-rwxr-xr-x 1 root root 62 Jan 19 14:16 zcat
-rwxr-xr-x 1 root root 67 Jan 19 14:16 zcmp
-rwxr-xr-x 1 root root 4422 Jan 19 14:16 zdiff
-rwxr-xr-x 1 root root 62 Jan 19 14:16 zegrep
-rwxr-xr-x 1 root root 62 Jan 19 14:16 zfgrep
-rwxr-xr-x 1 root root 2013 Jan 19 14:16 zforce
-rwxr-xr-x 1 root root 4896 Jan 19 14:16 zgrep
-rwxr-xr-x 1 root root 1731 Jan 19 14:16 zless
-rwxr-xr-x 1 root root 2414 Jan 19 14:16 zmore
-rwxr-xr-x 1 root root 4950 Jan 19 14:16 znew
rafael@debian:/bin$

Comando: Cut

Descrição: Corta texto mostrando apenas a posicão ou coluna especificada.

Exemplo: echo “Pinguinautas no Espaço” cut -c4-10

Resultado do comando: guinaut

O caractere (pipe) entre os comandos serve para ligar a saida de um comando na entrada de outro comando.
No exemplo acima a saida do comando é redirecionado para a entrada do comando cut que pega o 4º caractere até o 10º caractere e joga o resultado na saida padrao que a tela resultando em guinault
Agora vamos supor que você quera que a saida do comando vai para um arquivo.
Simples use o sinal de > (maior)

Veja como fica o exemplo anterior só que em vez do resultado ir para a tela ira para o arquivo que vamos chamar de inutil.txt.

echo “Pinguinautas no Espaço” cut -c4-10 > inutil.txt

Depois execute o comando:

cat inutil.txt

Veja outros tipos de redirecionamentos:

<> Redireciona para o arquivo
>> Acrescenta no arquivo.
2> Redirecona saida de erro para o arquivo
2>> Acrescenta saida de erro no arquivo.

ATENÇÃO: CUIDADO AO USAR > EM UM ARQUIVO EXISTENTE POIS O SEU CONTEUDO SERA TOTALMENTE APAGADO , EM VEZ DISSO USE O >> QUE SOMENTE ACRESCENTA NO FINAL DO ARQUIVO.

Outro exemplo com o comando ls e cut só que pegando somente uma coluna da saida do comando ls -l :

Exemplo:

rafael@debian:/bin$ ls -l
total 4244
-rwxr-xr-x 1 root root 700492 Mai 12 2008 bash
-rwxr-xr-x 3 root root 26292 Ago 5 2008 bunzip2
-rwxr-xr-x 1 root root 376108 Set 7 2008 busybox
-rwxr-xr-x 3 root root 26292 Ago 5 2008 bzcat
lrwxrwxrwx 1 root root 6 Mai 4 09:28 bzcmp -> bzdiff
-rwxr-xr-x 1 root root 2140 Ago 5 2008 bzdiff
lrwxrwxrwx 1 root root 6 Mai 4 09:28 bzegrep -> bzgrep
-rwxr-xr-x 1 root root 4874 Ago 5 2008 bzexe
lrwxrwxrwx 1 root root 6 Mai 4 09:28 bzfgrep -> bzgrep
-rwxr-xr-x 1 root root 3642 Ago 5 2008 bzgrep
-rwxr-xr-x 3 root root 26292 Ago 5 2008 bzip2
-rwxr-xr-x 1 root root 8156 Ago 5 2008 bzip2recover
lrwxrwxrwx 1 root root 6 Mai 4 09:28 bzless -> bzmore
-rwxr-xr-x 1 root root 1297 Ago 5 2008 bzmore
-rwxr-xr-x 1 root root 26860 Abr 4 2008 cat
-rwxr-xr-x 1 root root 45344 Abr 4 2008 chgrp
-rwxr-xr-x 1 root root 42744 Abr 4 2008 chmod
-rwxr-xr-x 1 root root 47356 Abr 4 2008 chown
-rwxr-xr-x 1 root root 69284 Abr 4 2008 cp
-rwxr-xr-x 1 root root 109260 Abr 3 2008 cpio
-rwxr-xr-x 1 root root 55052 Abr 4 2008 date
-rwxr-xr-x 1 root root 47892 Abr 4 2008 dd
-rwxr-xr-x 1 root root 45016 Abr 4 2008 df
-rwxr-xr-x 1 root root 92312 Abr 4 2008 dir
-rwxr-xr-x 1 root root 4428 Abr 28 2008 dmesg
-rwxr-xr-x 1 root root 8592 Dez 27 2007 dnsdomainname
-rwxr-xr-x 1 root root 24228 Abr 4 2008 echo
-rwxr-xr-x 1 root root 40260 Nov 15 2008 ed
-rwxr-xr-x 1 root root 92276 Ago 31 2008 egrep
-rwxr-xr-x 1 root root 22120 Abr 4 2008 false
-rwxr-xr-x 1 root root 5668 Abr 15 2008 fgconsole
-rwxr-xr-x 1 root root 55344 Ago 31 2008 fgrep
-rwxr-xr-x 1 root root 21092 Nov 4 2007 fuser
-rwxr-xr-x 1 root root 100468 Ago 31 2008 grep
-rwxr-xr-x 2 root root 61 Jan 19 14:16 gunzip
-rwxr-xr-x 1 root root 5864 Jan 19 14:16 gzexe
-rwxr-xr-x 1 root root 54412 Jan 19 14:16 gzip
-rwxr-xr-x 1 root root 8592 Dez 27 2007 hostname
-rwxr-xr-x 1 root root 193932 Jul 27 2008 ip
-rwxr-xr-x 1 root root 13148 Jan 11 2009 kill
-rwxr-xr-x 1 root root 38652 Abr 4 2008 ln
-rwxr-xr-x 1 root root 35048 Abr 15 2008 loadkeys
-rwxr-xr-x 1 root root 35236 Nov 14 2009 login

Vamos usar agora o comando:

rafael@debian:/bin$ ls -l cut -c15-29

oot root 700492
oot root 26292
oot root 376108
oot root 26292
oot root 6
oot root 2140
oot root 6
oot root 4874
oot root 6
oot root 3642
oot root 26292
oot root 8156
oot root 6
oot root 1297
oot root 26860
oot root 45344
oot root 42744
oot root 47356
oot root 69284
oot root 109260
oot root 55052
oot root 47892
oot root 45016
oot root 92312
oot root 4428
oot root 8592
oot root 24228
oot root 40260
oot root 92276
oot root 22120
oot root 5668
oot root 55344
oot root 21092
oot root 100468
oot root 61
oot root 5864
oot root 54412
oot root 8592
oot root 193932
oot root 13148
oot root 38652
oot root 35048
oot root 35236

Pegou somente o caractere na posição 15 até a posição 29.

Agora vamos pegar somente a 3º coluna:

rafael@debian:/bin$ ls -l cut -d” ” -f3

root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root

Veja esses exempos:

rafael@debian:/bin$ echo “Pinguinautas vão para a Lua” cut -d” ” -f2
vão
rafael@debian:/bin$ echo “Pinguinautas vão para a Lua” cut -d” ” -f2-5
vão para a Lua
rafael@debian:/bin$ echo “Pinguinautas vão para a Lua” cut -d” ” -f1-2
Pinguinautas vão
rafael@debian:/bin$ echo “pinguins@algumacoisa.com.br” cut -d”@” -f1
pinguins
rafael@debian:/bin$ echo “pinguins@algumacoisa.com.br” cut -d”@” -f2
algumacoisa.com.br
rafael@debian:/bin$ echo “pinguins@algumacoisa.com.br” cut -d”.” -f2
com
rafael@debian:/bin$ echo “pinguins@algumacoisa.com.br” cut -d”.” -f1
pinguins@algumacoisa
rafael@debian:/bin$ echo “pinguins@algumacoisa.com.br” cut -d”.” -f3
br

Explicando o comando cut -d” ” -f2

-d” ” = Usa o espaco como separator (delimitador) de coluna
-f2 = Exibe a segunda coluna depois do espaço

Mais um Exemplo:

cut -d”.” -f3

-d”.” = Usa o . como separador (delimitador) de coluna.
-f3 = Exibe a coluna depois do 3º ponto.

Links uteis:

http://www.vivaolinux.com.br/scripts/categoriaIndex.php?codigo=4 => Pagina com Varios shells scripts de exemplo para você aprender.

http://aurelio.net/shell/ => Site do Livro Shell script profissional com varias informações e links para outros tutorias para entrar no mundo do shell script

http://guia-er.sourceforge.net/ => Site que fala sobre expressoes regulares muito util em shell script para simprificar na programação que tambem vale para outras linguagem de programação.

http://sourceforge.net/projects/getgnuwin32/files/ => Link para Download do gnuwin32 que traz varias ferramentas para programação em shell script no sistema Windows.

Anúncios

Analise: Distribuição Linux Educacional 3.0

A distribuição Linux Educacional é uma distribuição Linux desenvolvida pelo MEC para ser usadas nas instituições de ensino como parte do processo pedagogico.
Essa distribuição é baseada no Kubuntu e possui alguns atalhos para atividades educacionais como por exemplo algumas materias da TV Escola e possui um repositorial adicional para instalação dessas atividades educacionais , tambem achei interessante que esta disponivel um pacote no repositorio para instalar o Hino Nacional do Brasil que me fez sentir-me um pouco patriota.
Essa Distribuição é um Live CD que pode ser facilmente instalado no HD , eu instalei em uma maquina virtual do Vmware Player , segue uma analise mais detalhada abaixo:

Como vc podem observar na figura acima essa distribuição possui um repositorio mantido pelo mec com varias atividades educacionais , como por exemplo obras literarias , e videos , documentarios com assuntos diversos da TV Escola.

Tux Paint é um programa de desenho voltado para crianças , ele é bem simples de usar.
Ele dispoe de varias ferramentas de desenhos (lapis , borracha , tinta , carimbos , e alguns efeitos (veja a minha obra de arte na imagem acima.

Com o Kauzium vc pode visualizar a tabela periodica com todos os elementos quimicos e quando posiciona o mouse em cima de algum elemento é apresentada uma figura com o nome do elemento.

No Ktouch vc pode treinar a digitação muito para aulas de digitação.

Bem existem varios programas educacionais nessa distribuição que se fosse mencionar um a um ficaria um post imenso.

Para quem quiser experimentar segue os links abaixo:

Site oficial:

http://linuxeducacional.com/

Download:

http://sourceforge.net/projects/educacional/files/3/Linuxeducacional_3.0.iso

TCLKIT – Transforme seus scripts TCL em arquivos executaveis

Ola Pessoal venho por meio desse post falar um pouco sobre o tclkit que é um interpretador tcl/tk que possibilita empacotar o interpretador tcl/tk junto com as extensões necessarias em um arquivo executavel (*.exe ou executavel no Linux). 

Ingredientes

O site para download do tclkit é:

Interpretador Tcl/TK (Windows 32 bits)
Interpretador Tcl (Windows 32 bits)
Programinha para fazer o “Empacotamento em .exe”
Modo de preparo 

Jogue tudo em uma pasta.


Cria a pasta do programa que deseja empacotar com tclkit.
Exemplo para empacotar o programa teste crie uma pasta de nometeste.vfs
Dentro dessa pasta coloque o fonte em tcl com o nome de main.tcl
Caso seu programa (main.tcl) necessitar de alguma extensão apenas crie uma pasta dentro do teste.vfs com o nome de lib , e copie da instalação do seu tcl (c:\tcl\lib\a_extensão) para dentro da pasta teste.vfs\lib

Abra o prompt do ms-dos (cmd.exe) e dentro da pasta onde você colocou os arquivos do tclkit execute os seguintes comandos:

copy tclkitsh-win32.upx.exe tclkit.exe
copy tclkit-win32.upx.exe tclkit-w.exe
Para “Empacotar” um script Tcl (sem TK) execute o comando:

tclkitsh-win32.upx.exe sdx.kit wrap teste -runtime tclkit.exe
Se tudo der certo sera criado um arquivo chamado teste

Execute o comando:
ren teste teste.exe
teste.exe

—————-

 

Para “Empacotar” um script Tcl/Tk execute o comando:

tclkit-win32.upx.exe sdx.kit wrap teste -runtime tclkit-w.exe

Espera alguns segundos e aparecera uma janela branca de console e aguarde aparecer uma linha com a informação:

updated

Apos isso somente feche a janela branca do console.
Se tudo der certo sera criado um arquivo chamado teste

Execute os comandos:

ren teste teste.exe
teste.exe

—————

Para “desempacotar” se não me engano o comando é:

tclkit-win32.upx.exe sdx.kit unwrap teste.exe
ou
tclkitsh-win32.upx.exe sdx.kit unwrap teste.exe

 

Divirta-se a gosto.