Você está na página 1de 16

APRENDENDO SHELL SCRIPT

2013

CEDUP FERNANDO MATTAR


A MAIOR PARTE DOS USURIOS CLASSIFICAM SHELL SCRIPT COMO UMA LINGUAGEM DE FCIL APRENDIZAGEM. O PRIMEIRO PASSO , SABER O QUE SE DESEJA FAZER, ENTO VER QUAL O CDIGO QUE EXECUTA ESTE COMANDO EM SHELL E A CRIAR.

Aprendendo Shell Script

Aprendendo Shell Script


Antes de saber o que um script em shell, importante saber o que um Shell. Na linha de comandos de um shell, podemos utilizar diversos comandos um aps o outro, ou mesmo combin-los numa mesma linha. Se colocarmos diversas linhas de comandos em um arquivo texto simples, teremos em mos um Shell Script, ou um script em Shell, j que Script uma descrio geral de qualquer programa escrito em linguagem interpretada, ou seja, no compilada. Outros exemplos de linguagens para scripts so o PHP, Perl, Python, JavaScript e muitos outros. Podemos ento ter um script em php, um script perl e assim em diante. Uma vez criado, um Shell Script pode ser reutilizado quantas vezes for necessrio. Seu uso, portanto, indicado na automao de tarefas que sero realizadas mais de uma vez. Todo sistema Unix e similares so repletos de scripts em shell para a realizao das mais diversas atividades administrativas e de manuteno do sistema. Os arquivos de lote (batch - arquivos *.bat) do windows so tambm exemplos de Scripts, j que so escritos em linguagem interpretada e executados por um Shell do Windows, em geral o command.com ou hoje em dia o cmd.exe. Os Shells do Unix, porm, so inumeras vezes mais poderosos que o interpretador de comandos do windows, podendo executar tarefas muito mais complexas e elaboradas. O Shell mais comum e provavelmente o que possui mais scripts escritos para ele tambm um dos mais antigos e simples, o sh. Este shell est presente em todo o sistema tipo Unix, includo o Linux, FreeBSD, AIX, HP-UX,OpenBSD, Solaris, NetBSD, Irix, etc. Por ser o shell nativo mais comum natural que se prefira escrever scripts para ele, tornando o script mais facilmente portvel para outro sistema. Os Shells no esto diretamente associados a um ou outro tipo de Unix, embora vrias empresas comerciais tenham suas prprias verses de Shell. No software livre o Shell utilizado em um sistema em geral exatamente o mesmo utilizado em outro. Por exemplo, o bash encontrado no Linux o mesmo shell bash encontrado no FreeBSD e pode tambm facilmente ser instalado no Solaris, Windows atravs do Cygwin ou outros sistemas Unix comerciais para passar a ser utilizado como interface direta de comandos ou como interpretador de scripts. O mesmo acontece com o tcsh e vrios outros shells desenvolvidos no modelo de software livre.

Comandos Bsicos do Shell


Antes de comearmos a programas devemos conhecer nossos diretrios e os comandos que nosso Shell e capaz de processar e qual finalidade de cada comando.

Pgina 1

Aprendendo Shell Script

Estrutura de Diretrios
Esta estrutura muito parecida sistemas Linux/BSD e, observando-se a lgica, possvel entender as pastas que no esto nesta lista como por exemplo as que esto dentro do /usr/local (que tem a mesma estrutura do /usr). /root - Diretrio HOME do Superusurio. /home - Diretrio HOME dos usurios comuns. /bin - Comandos utilizados durante o boot e por usurios comuns. /sbin - Como os comandos do /bin s que no so utilizados pelos usurios comuns. /proc - Sistema de arquivos virtual (na memria) com dados do Kernel. /boot - Arquivos utilizados durante a inicicializao do sistema e o Kernel. /dev - Dispositivos (modem, mouse, teclado, etc..). /etc - Arquivos de configuraes do sistema. /etc/skel - Padro de arquivos para o diretrio HOME de novos usurios. /etc/sysconfig - Arquivos de configurao do sistema para os dispositivos. /mnt - Local onde so montados discos e volumes temporrios (disquete, outros HDs, CD-ROM, etc..). /tmp - Arquivos temporrios do sistema utilizados antes da inicializao do sistema ter sido concluda. /var - Contm arquivos que so modificados com o decorrer do uso do sistema (e-mail , temporrios, filas de impresso, manuais). /var/lib - Bibliotecas que mudam enquanto o sistema est rodando. /var/local - Arquivos variveis de programas que esto rodando. /var/lock - Travas para indicar que um programa est utilizando um determinado dispositivo. /var/log - Arquivos de log do sistema (erros, logins, etc..) /var/run - Arquivos importantes ao sistema teis at o prximo boot (atualizaes de softwares e kernel). /var/spool - Diretrio de filas de impresso, e-mail e outros /var/tmp - Arquivos temporrios dos programas /var/catman - Um cache para manuais que so formatados na hora de serem utilizados. /lib - Bibliotecas compatilhadas necessrias pelos programas do sistema. /lib/modules - Modulos externos do kernel para dispositivos e funes. /usr - Contm arquivos de todos os programas e bilbiotecas para o uso dos usurios do Linux. /usr/bin - Executveis em geral. /usr/sbin - Executvies de administrao do sistema no necessrios pelo kernel, como por exemplo servidores. /usr/include - Arquivos para serem utilizados em linguagens de programao. /usr/lib - Bibliotecas dos executvies encontrados no /usr/bin /usr/local - Arquivos de programas instalados localmente (apenas para alguns usurios). /usr/man - Manuais /usr/info - Documentos de Informaes /usr/X11R6 - Arquivos do X Window System e seus aplicativos.

Pgina 2

Aprendendo Shell Script

Comandos e suas Funes


Comandos do Sistema de Arquivos: So comandos para lidar com o sistema de arquivos (HDs,
drives e parties de rede). badblocks - Utilizado para encontrar defeitos fsicos no HD. cfdisk - Similar ao fdisk s que com uma interface melhorada. df - Mostra o espao livre no disco. dosfsck Verifica e repara sistemas FAT do DOS. du - Mostra o espao que ocupa um diretrio e os arquivos internos. dump - Usado para fazer o backup de um sistema ext2. O complemento deste comando o restore. dumpe2fs - Faz o backup de blocos do HD e grupos. e2fsck - Verifica um volume ext2 em busca de erros. e2label - Muda o nome de uma partio ext2. fdisk - Usado para criar, editar e apagar parties no HD. fdformat - Formata um disquete. mount - Usado para "montar" um sistema de arquivos. O complemento deste comando o umount. restore - Usado para restaurar um sistema ext2. umount - Desmonta o sitema de arquivos. O complemento o comando mount. cdrecord - Grava CDs. cdparanoia - Grava CDs de audio.

Manipulao de arquivos e diretrios


cd - Muda para um diretrio. Se voc no especificar nada ele muda para seu diretrio HOME. chmod - Muda as permisses para acesso aos arquivos e diretrios (Escrita, Leitura, etc..) chown - Muda o propritrio e grupo de um arquivo ou diretrio. chgrp - Muda o grupo de um arquivo ou diretrio. cp - Copia os arquivos de um diretrio/pasta para outro diretrio/pasta. dir - Lista o contedo de um diretrio (preferir o comando "ls"). find - Procura arquivos com determinadas caractersticas na rvore de diretrios. ln - Cria um link simblico para um arquivo. ls - Lista os arquivos de um diretrio. mc - Midinght Commander. Um gerenciador de arquivos completo para o console. MUITO BOM! mkdir - Cria um diretrio. mv - Move ou renomeia um arquivo. rm - Exclui arquivos. rmdir - Exclui um diretrio vazio. vdir - Lista o contedo de um diretrio. wheris - Localiza o executvel, cdigo fonte e manual de um comando. ghomemover_console - Programa escrito por Daniel Brooke Peig que faz a mudana de diretrios alterando as referncias a arquivos.

Pgina 3

Aprendendo Shell Script

Edio e visualizao de arquivos


ed - Editor de Texto emacs - Editor de texto mais completo. gitview - Visualizador de arquivos Hexadecimais. head - Mostra as primeiras linhas de um arquivo. jed - Editor joe - Editor less - Usado para visualizar arquivos. more - Usado para visualizar arquivos. pico - Editor de textos simples. tail - Mostra as ltimas linhas de um arquivo. vi - Editor com uma interface de linha de comando.

Compresso de arquivos, backup e restaurao


ar - Cria, modifica e extrai arquivos. bunzip2 - Descompactador de arquivos bZIP2. bzip2 - Compactador de arquivos bZIP2. bzip2recover - Recupera arquivos bzip2 danificados. compress - Comprime informaes. gunzip - Descompacta um arquivo GZip. gzip - Compacta arquivos no formato GZip. rpm - Instalador de programas (pacotes) do RedHat. tar - Compacta grupos de arquivos. uncompress - Descompacta informaes. unzip - Descompacta arquivos ZIP. zip - Compactador de arquivos ZIP.

Gerenciamento de processos e aplicativos


gitps - Um gerenciador de processos com interface grfica. killall - Fecham todos os processos por nome. sa - Mostra informaes sobre os processos que esto sendo executados pelos usurios. top - Mostra os processos que esto ocupando a manior quantidade de recursos do sistema. CTRL-C - Fecha o programa em questo. & - No final de cada comando faz com que o aplicativo rode em background.

Gerenciamento de processos e aplicativos


gitps - Um gerenciador de processos com interface grfica. killall - Fecham todos os processos por nome. sa - Mostra informaes sobre os processos que esto sendo executados pelos usurios. top - Mostra os processos que esto ocupando a manior quantidade de recursos do sistema. CTRL-C - Fecha o programa em questo.

Pgina 4

Aprendendo Shell Script

& - No final de cada comando faz com que o aplicativo rode em background.

Rede
domainname - Mostra ou ajusta o nome de domnio do sistema. hostname - Usado para mostrar ou atualizar o nome do micro na rede. finger - Mosta informaes sobre um determinado usurio. ftp - Programa de transferncia de arquivos. ifconfig - Configura a interface de rede. netconf - Interface grfica do RedHat para confiurar a rede. netconfig - Outra interface grfica para a configurao da rede. netstat - Mostra informaes sobre as conexes rede. ping - Manda um echo ICMP para um determinado sistema da rede. rcp - Copia arquivos entre diferentes hosts da rede. rlogin - Inicia um terminal em um Host remoto. route - Mostra e manipula a tabela de roteamento. rsh - Executa um comando em um host da rede. rup - Mostra o status de um sistema na rede. showmount - Mostra informaes de sistemas NFS monstados sobre a rede. telnet - Interface para o protocolo Telnet. traceroute - Mostra o caminho dos pacotes at um determinado host.

Comunicaes e e-mail
mailx - E-Mail. lynx - Browser de Internet para o console. pine - Programa para e-maisl, notcias e mensagens na rede. sendmail - Muito popular, envia e-mails. smail - Outro famosos sistema de e-mails mais fcil de usar que o sendmail. talk - Permite a conversa entre dois micros. tin - Leitor de Notcias.

Modos de execuo do sistema


exit - Termina o shell. halt - Congela o sistema . logout - Faz o logout do usurio. poweroff - Desliga o computador. reboot - Reinicia o computador. startx - Inicia o X-Window System.

Configurao do sistema
kernelcfg - Interface grfica para a configurao do Kernel em Sistemas RedHat.

Pgina 5

Aprendendo Shell Script

linuxconf - Sistema de configuraes gerais do RedHat. mouseconfig - Aplicativo RedHat para a configurao do mouse. printtool - Aplicativo do RedHat para a configurao de impresso. quota - Mostra o uso do disco e seus limites. samba - Utilizado para ligar/desligar/reiniciar o Samba (cliente de redes Microsoft). setserial - Muda/Mostra informaes sobre as portas seriais. setup - Configura os dispositivos e os sistemas de arquivos. timeconfig - Utilitrio da RedHat para a configurao do relgio. sndconfig - Utilitrio RedHat para a configurao da placa de som.

Informaes do sistema
df - Mostra o espao livre em disco. du - Mostra o uso do disco. free - Mostra a memria livre do disco. lspci - Lista os dispositivos PCI. pnpdump - Mostra informaes sobre os dispositivos ISA. pstree - Mostra a rvore de processos. tload - Imprime um grfico com os recursos do sistema. vmstat - Mostra as estatsticas da memria virtual.

Gerenciamento de usurios
adduser - Adiciona um usurio ao sistema. groupadd - Cria um novo grupo. groupdel - Apaga um grupo. groupmod - Modifica um grupo. groups - Imprime os grupos de um usurio. logname - Mostra o login name do usurio. passwd - Muda a senha. smbclient - Cliente para redes SAMBA. smbmount - Monta um sistema de arquivos SAMBA (Windows). su - Muda o usurio para nico. sulogin - Login do modo de nico usurio. useradd - Adiciona um usurio. userdel - Apaga um usurio e seus arquivos. usermod - Modifica um usurio. w - Mostra os usurios logados e o que esto fazendo. wall - Manda uma mensagem para todos no terminal.

Pgina 6

Aprendendo Shell Script

O Seu Primeiro Shell Script


Nosso primeiro Shell Script chamaremos de sistema, que consistira em fazer ele executar 3 comandos em um mesmo script. No esquea de sempre utilizar letras minsculas e evite usar acentos, smbolos e espao em branco no nome do seu Shell Script. Para criamos nosso primeiro Shell Script utilizaremos qualquer editor de texto que tivermos a mo, para iniciamos temos que identificar que esse arquivo no um arquivo comum para isso temos que colocar um cabealho que o sistema interprete como sendo um script e no um arquivo de texto qualquer. As informaes que colocaremos no cabealho ser o tipo de Shell que estamos utilizando como mostra asseguir:

#!/bin/bash Observao: Aps o diretrio /bin informamos que tipo de Shell utilizaremos se no caso fosse (Bourne Shell) utilizariamos o sh no lugar do bash, no caso se utilizariamos o (Korn Shell) no lugar do bash seria ksh (Korn Shell), assim como tantos outros que existem mais utilizaremos o bash. Iremos criar um script que nos de as seguintes informaes: Data do nosso sistema, espao livre em disco e o usurio conectado o script ficaria dessa forma:

#!/bin/bash date df who

Com estas informaes nosso script far o que nos propomos a fazer mais iremos salvar ele com o nome de sistema.sh, mais falta fazer ele se tornar um executvel para o sistema isso obtivemos atravs do comando chmod como mostro a seguir:

chmod +x sistema.sh

Agora podemos executar nosso script basta digitar o seguinte comando:

./sistema.sh

Pgina 7

Aprendendo Shell Script

Problemas que podem ocorrer na execuo do script


Comando no encontrado
O Shell no encontrou seu script. Verifique se o comando que voc esta chamando tem exatamente o mesmo nome do seu script. Lembre-se que no Unix/Linux as letras maisculas e minsculas so diferentes, ento o comando SISTEMA diferente do comando sistema. Caso o nome esteja correto, verifique se ele est no PATH do sistema. O comando que verifica o PATH :

echo $PATH

esse comando mostra quais so os diretrios conhecidos, mova seu script para dentro deles, ou chame-o passando o caminho completo ou basta entrar no diretrio que ele est e executar o comando que chama seu script.

./sistema.sh (dentro do diretrio corrente) /tmp/scripts/sistema.sh (indicando o caminho completo para execuo)

Permisso negada
O Shell encontrou seu script, mas ele no um executvel, use o comando chmod para torna-lo um executvel como mostra a seguir:

chmod +x ./sistema.sh

Erro de Sintaxe
O Shell encontrou e executou seu script, porm ele tem erros. Um script s executado quando sua sintaxe est 100% correta. Verifique os seus comandos, geralmente o erro algum caracter a mais, um comandos errados ou aspas que foram abertas e no foram fechadas. A prpria mensagem informa o numero da linha onde o erro foi encontrado.

Pgina 8

Aprendendo Shell Script

Melhorando o Script para o usurio


Executar os trs comandos seguindo resulta em um bolo de texto na tela, misturando as informaes e dificultando o entendimento. preciso trabalhar um pouco a sada do script, tornando-a mais amigvel. O comando echo serve para mostrar mensagens na tela ou pular linhas na tela. Que tal anunciar cada comando antes de execut-lo?

#!/bin/bash echo Data e Horrio: date echo echo Uso do Disco: df echo echo Usurio Conectado: who

Para usar co comando echo, basta colocar o texto entre aspas. Se nenhum texto for colocado, uma linha em branco mostrada, mais no esquea de fechar as aspas pois caso esquea isso ira gerar um erro de sintaxe.

Pgina 9

Aprendendo Shell Script

Conceito de Variveis em Shell Script


As variveis so posies na memria do computador onde ficam armazenadas n temporariamente algum valor para ser usadas por programas ou scripts que no Linux so precedidas pelo caractere dlar $. No Linux existem dois tipos de variveis: Variveis do sistema criadas e gerenciadas pelo prprio Linux e so definidas em letras MAISCULAS, onde visualiza-las pelos comandos printenv e env tais como: HOME, USER ou USERNAME, SHELL e etc Variveis definidas pelo usurio criadas e gerenciadas pelo usurio e so definidas em letras minsculas ou MAISCULAS. Variveis do sistema Voc pode ver as variveis do sistema com os comandos printenv, env e set como mostra o exemplo abaixo: $ printenv

Pgina 10

Aprendendo Shell Script

$ env

Algumas variveis do sistema


SHELL - Exibe o nome do shell HOME - Exibe o diretrio home do usurio USER ou USERNAME - Exibe o nome do usurio LOGNAME - Exibe o login do usurio LANG - Exibe o idioma do sistema OSTYPE - Exibe a arquitetura do sistema Voc tambm pode exibir qualquer varivel ambiente do sistema com o comando echo como mostra o exemplo abaixo:

echo $HOME echo $PATH

Obs: Nunca esquea que variveis do sistema tem que ter seus caracteres em maisculo.

Pgina 11

Aprendendo Shell Script

Variveis definidas pelo usurio


O nome de variveis podem comear com uma letra do alfabeto (a, b, c, ) ou com underline_, sendo que o shell sensitive case, ou seja, diferencia minsculo de maisculo, portanto A diferente de a. Para exibir o valor de uma varivel atravs do comando echo necessrio especificar o sinal de dlar $ antes do nome da varivel ($a). Outro detalhe que no permitido espaos em branco (a =10 ou a= 10 ou a = 10) ou iniciar uma varivel com um valor numrico (1a=10) , abaixo seguem exemplos de variveis O bash reconhece uma varivel quando ela comea com $, ou seja, a diferena entre palavra e $palavra que a primeira uma palavra qualquer, e a outra uma varivel. Para definir uma varivel, utilizamos a seguinte sintaxe:

$ variavel=valor_da_variavel

O valor ser atribudo a varivel . Valor pode ser uma frase, nmeros, e at outras variveis e comandos. O valor pode ser expressado entre as aspas (), apstrofos () ou crases (). As aspas vo interpretar as variveis que estiverem dentro do valor, os apstrofos lero o valor literalmente, sem interpretar nada, e as crases vo interpretar um comando e retornar a sua sada para a varivel.

OBS: \(barra) invertida com a varivel ao seu lado(\$A), retorna o prprio nome da varivel no momento da execuo do script como mostra o script abaixo:

Pgina 12

Aprendendo Shell Script

Exemplo de cdigo com varivel de ambiente: #!/bin/bash variavel="Eu estou logado como usurio $user" echo $variavel variavel="Meu diretrio atual o `pwd`" echo $variavel

Se voc quiser criar um script em que o usurio deve interagir com ele, possvel que voc queira que o prprio usurio defina uma varivel, e para isso usamos o comando read, que dar uma pausa no script e ficarar esperando o usurio digitar algum valor e teclar enter como mostra o exemplo:

#!/bin/bash echo Qual seu o dia do aniversrio? read RESPOSTA echo Voc faz aniversrio no dia echo $RESPOSTA

Variveis especiais
$0 Exibe o nome do programa ou script que est sendo executado $? Exibe o estado de sada do ltimo comando executado $$ Exibe o nmero do processo do script que est sendo executado $# Exibe o nmero de parmetros fornecido para um comando $! Exibe o nmero do ltimo processo que est sendo executado em background $* Exibe todos os parmetros separados por espaos em branco $@ Idntico ao anterior ($*) $- Opes correntes definidas pelo shell

Pgina 13

Aprendendo Shell Script

$_ Armazena o valor do ltimo parmetro do comando anterior $1 a $9 Exibe a posio do parmetro de 1 a 9 echo $PWD Caminho para a directoria actual. echo $UID - ID do utilizador que iniciou a Shell echo $SHLVL Numero de sesses Shell abertas. echo $REPLY - Contm o ltimo input recebido pela funo read no suportado pelo ?SH? echo $RANDOM Cria um nmero aleatrio entre 0 e 32767 no suportado pelo ?SH? echo $PATH Caminhos de pesquisa para comandos das Shell. echo $HOME Caminho para a HOME do utilizador actual. Exemplos:

Manipulao de string com variveis.


possvel fazer tambm referncia a valores de variveis entre { } para separar a varivel e dos caracteres especiais. Veja abaixo: $variavel - Exibe o valor da varivel ${variavel} Idntico ao anterior ${#variavel} Exibe o total de caracteres da varivel ${variavel:-texto} Se a varivel no for definida retorna o texto ${variavel:posioX} Retorna o texto a partir da posio (posioX) ${variavel:posioX:quantidadeX} Retorna a quantidade (quantidadeX) de caracteres a partir da posio (posioX) ${variavel#texto} Recorta o texto do inicio string ${variavel%texto} Recorta o texto do fim string ${variavel/texto/novo} Substitui texto por um texto novo somente uma vez ${variavel//texto/novo} Substitui texto por um texto novo sempre

Pgina 14

Aprendendo Shell Script

Exemplos:

Outro Exemplo:

Outro Exemplo:

Pgina 15