aprendendo shell script

Transcrição

aprendendo shell script
APRENDENDO
SHELL SCRIPT
2013
CEDUP – FERNANDO MATTAR
A MAIOR PARTE DOS USUÁRIOS CLASSIFICAM SHELL SCRIPT COMO
UMA LINGUAGEM DE FÁCIL APRENDIZAGEM. O PRIMEIRO PASSO É,
SABER O QUE SE DESEJA FAZER, ENTÃO VER QUAL O CÓDIGO 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 após o outro, ou
mesmo combiná-los numa mesma linha. Se colocarmos diversas linhas de comandos em um arquivo texto
simples, teremos em mãos um Shell Script, ou um script em Shell, já que Script é uma descrição geral de
qualquer programa escrito em linguagem interpretada, ou seja, não compilada. Outros exemplos de
linguagens para scripts são o PHP, Perl, Python, JavaScript e muitos outros. Podemos então ter um script
em php, um script perl e assim em diante.
Uma vez criado, um Shell Script pode ser reutilizado quantas vezes for necessário. Seu uso,
portanto, é indicado na automação de tarefas que serão realizadas mais de uma vez. Todo sistema Unix e
similares são repletos de scripts em shell para a realização das mais diversas atividades administrativas e
de manutenção do sistema.
Os arquivos de lote (batch - arquivos *.bat) do windows são também exemplos de Scripts, já que
são 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, porém, são 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 é também um dos
mais antigos e simples, o sh. Este shell está presente em todo o sistema tipo Unix, incluído
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 portável para outro
sistema.
Os Shells não estão diretamente associados a um ou outro tipo de Unix, embora várias empresas
comerciais tenham suas próprias versões 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 também facilmente ser instalado no Solaris, Windows através
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 vários outros shells
desenvolvidos no modelo de software livre.
Comandos Básicos do Shell
Antes de começarmos a programas devemos conhecer nossos diretórios e os comandos que nosso
Shell e capaz de processar e qual finalidade de cada comando.
Página 1
Aprendendo Shell Script
Estrutura de Diretórios
Esta estrutura é muito parecida sistemas Linux/BSD e, observando-se a lógica, é possível entender
as pastas que não estão nesta lista como por exemplo as que estão dentro do /usr/local (que tem a mesma
estrutura do /usr).
/root - Diretório HOME do Superusuário.
/home - Diretório HOME dos usuários comuns.
/bin - Comandos utilizados durante o boot e por usuários comuns.
/sbin - Como os comandos do /bin só que não são utilizados pelos usuários comuns.
/proc - Sistema de arquivos virtual (na memória) com dados do Kernel.
/boot - Arquivos utilizados durante a inicicialização do sistema e o Kernel.
/dev - Dispositivos (modem, mouse, teclado, etc..).
/etc - Arquivos de configurações do sistema.
/etc/skel - Padrão de arquivos para o diretório HOME de novos usuários.
/etc/sysconfig - Arquivos de configuração do sistema para os dispositivos.
/mnt - Local onde são montados discos e volumes temporários (disquete, outros HDs, CD-ROM, etc..).
/tmp - Arquivos temporários do sistema utilizados antes da inicialização do sistema ter sido concluída.
/var - Contém arquivos que são modificados com o decorrer do uso do sistema (e-mail , temporários, filas
de impressão, manuais).
/var/lib - Bibliotecas que mudam enquanto o sistema está rodando.
/var/local - Arquivos variáveis de programas que estão 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 próximo boot (atualizações de softwares e kernel).
/var/spool - Diretório de filas de impressão, e-mail e outros
/var/tmp - Arquivos temporários dos programas
/var/catman - Um cache para manuais que são formatados na hora de serem utilizados.
/lib - Bibliotecas compatilhadas necessárias pelos programas do sistema.
/lib/modules - Modulos externos do kernel para dispositivos e funções.
/usr - Contém arquivos de todos os programas e bilbiotecas para o uso dos usuários do Linux.
/usr/bin - Executáveis em geral.
/usr/sbin - Executávies de administração do sistema não necessários pelo kernel, como por exemplo
servidores.
/usr/include - Arquivos para serem utilizados em linguagens de programação.
/usr/lib - Bibliotecas dos executávies encontrados no /usr/bin
/usr/local - Arquivos de programas instalados localmente (apenas para alguns usuários).
/usr/man - Manuais
/usr/info - Documentos de Informações
/usr/X11R6 - Arquivos do X Window System e seus aplicativos.
Página 2
Aprendendo Shell Script
Comandos e suas Funções
Comandos do Sistema de Arquivos: São comandos para lidar com o sistema de arquivos (HDs,
drives e partições de rede).
badblocks - Utilizado para encontrar defeitos físicos no HD.
cfdisk - Similar ao fdisk só que com uma interface melhorada.
df - Mostra o espaço livre no disco.
dosfsck Verifica e repara sistemas FAT do DOS.
du - Mostra o espaço que ocupa um diretório 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 partição ext2.
fdisk - Usado para criar, editar e apagar partições 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.
Manipulação de arquivos e diretórios
cd - Muda para um diretório. Se você não especificar nada ele muda para seu diretório HOME.
chmod - Muda as permissões para acesso aos arquivos e diretórios (Escrita, Leitura, etc..)
chown - Muda o propritário e grupo de um arquivo ou diretório.
chgrp - Muda o grupo de um arquivo ou diretório.
cp - Copia os arquivos de um diretório/pasta para outro diretório/pasta.
dir - Lista o conteúdo de um diretório (preferir o comando "ls").
find - Procura arquivos com determinadas características na árvore de diretórios.
ln - Cria um link simbólico para um arquivo.
ls - Lista os arquivos de um diretório.
mc - Midinght Commander. Um gerenciador de arquivos completo para o console. MUITO BOM!
mkdir - Cria um diretório.
mv - Move ou renomeia um arquivo.
rm - Exclui arquivos.
rmdir - Exclui um diretório vazio.
vdir - Lista o conteúdo de um diretório.
wheris - Localiza o executável, código fonte e manual de um comando.
ghomemover_console - Programa escrito por Daniel Brooke Peig que faz a mudança de diretórios
alterando as referências a arquivos.
Página 3
Aprendendo Shell Script
Edição e visualização 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.
Compressão de arquivos, backup e restauração
ar - Cria, modifica e extrai arquivos.
bunzip2 - Descompactador de arquivos bZIP2.
bzip2 - Compactador de arquivos bZIP2.
bzip2recover - Recupera arquivos bzip2 danificados.
compress - Comprime informações.
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 informações.
unzip - Descompacta arquivos ZIP.
zip - Compactador de arquivos ZIP.
Gerenciamento de processos e aplicativos
gitps - Um gerenciador de processos com interface gráfica.
killall - Fecham todos os processos por nome.
sa - Mostra informações sobre os processos que estão sendo executados pelos usuários.
top - Mostra os processos que estão ocupando a manior quantidade de recursos do sistema.
CTRL-C - Fecha o programa em questão.
& - 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 gráfica.
killall - Fecham todos os processos por nome.
sa - Mostra informações sobre os processos que estão sendo executados pelos usuários.
top - Mostra os processos que estão ocupando a manior quantidade de recursos do sistema.
CTRL-C - Fecha o programa em questão.
Página 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 domínio do sistema.
hostname - Usado para mostrar ou atualizar o nome do micro na rede.
finger - Mosta informações sobre um determinado usuário.
ftp - Programa de transferência de arquivos.
ifconfig - Configura a interface de rede.
netconf - Interface gráfica do RedHat para confiurar a rede.
netconfig - Outra interface gráfica para a configuração da rede.
netstat - Mostra informações sobre as conexões à 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 informações de sistemas NFS monstados sobre a rede.
telnet - Interface para o protocolo Telnet.
traceroute - Mostra o caminho dos pacotes até um determinado host.
Comunicações e e-mail
mailx - E-Mail.
lynx - Browser de Internet para o console.
pine - Programa para e-maisl, notícias e mensagens na rede.
sendmail - Muito popular, envia e-mails.
smail - Outro famosos sistema de e-mails mais fácil de usar que o sendmail.
talk - Permite a conversa entre dois micros.
tin - Leitor de Notícias.
Modos de execução do sistema
exit - Termina o shell.
halt - Congela o sistema .
logout - Faz o logout do usuário.
poweroff - Desliga o computador.
reboot - Reinicia o computador.
startx - Inicia o X-Window System.
Configuração do sistema
kernelcfg - Interface gráfica para a configuração do Kernel em Sistemas RedHat.
Página 5
Aprendendo Shell Script
linuxconf - Sistema de configurações gerais do RedHat.
mouseconfig - Aplicativo RedHat para a configuração do mouse.
printtool - Aplicativo do RedHat para a configuração de impressão.
quota - Mostra o uso do disco e seus limites.
samba - Utilizado para ligar/desligar/reiniciar o Samba (cliente de redes Microsoft).
setserial - Muda/Mostra informações sobre as portas seriais.
setup - Configura os dispositivos e os sistemas de arquivos.
timeconfig - Utilitário da RedHat para a configuração do relógio.
sndconfig - Utilitário RedHat para a configuração da placa de som.
Informações do sistema
df - Mostra o espaço livre em disco.
du - Mostra o uso do disco.
free - Mostra a memória livre do disco.
lspci - Lista os dispositivos PCI.
pnpdump - Mostra informações sobre os dispositivos ISA.
pstree - Mostra a árvore de processos.
tload - Imprime um gráfico com os recursos do sistema.
vmstat - Mostra as estatísticas da memória virtual.
Gerenciamento de usuários
adduser - Adiciona um usuário ao sistema.
groupadd - Cria um novo grupo.
groupdel - Apaga um grupo.
groupmod - Modifica um grupo.
groups - Imprime os grupos de um usuário.
logname - Mostra o login name do usuário.
passwd - Muda a senha.
smbclient - Cliente para redes SAMBA.
smbmount - Monta um sistema de arquivos SAMBA (Windows).
su - Muda o usuário para único.
sulogin - Login do modo de único usuário.
useradd - Adiciona um usuário.
userdel - Apaga um usuário e seus arquivos.
usermod - Modifica um usuário.
w - Mostra os usuários logados e o que estão fazendo.
wall - Manda uma mensagem para todos no terminal.
Página 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. Não esqueça de sempre utilizar letras minúsculas e evite usar acentos,
símbolos e espaço em branco no nome do seu Shell Script.
Para criamos nosso primeiro Shell Script utilizaremos qualquer editor de texto que tivermos a mão,
para iniciamos temos que identificar que esse arquivo não é um arquivo comum para isso temos que colocar
um cabeçalho que o sistema interprete como sendo um script e não um arquivo de texto qualquer.
As informações que colocaremos no cabeçalho será o tipo de Shell que estamos utilizando como
mostra asseguir:
#!/bin/bash
Observação: Após o diretório /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 informações: Data do nosso sistema, espaço livre
em disco e o usuário conectado o script ficaria dessa forma:
#!/bin/bash
date
df
who
Com estas informações 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 executável para o sistema isso obtivemos através do
comando chmod como mostro a seguir:
chmod +x sistema.sh
Agora podemos executar nosso script basta digitar o seguinte comando:
./sistema.sh
Página 7
Aprendendo Shell Script
Problemas que podem ocorrer na execução do script
Comando não encontrado
O Shell não 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 maiúsculas e minúsculas são
diferentes, então 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 são os diretórios conhecidos, mova seu script para dentro deles, ou
chame-o passando o caminho completo ou basta entrar no diretório que ele está e executar o comando que
chama seu script.
./sistema.sh (dentro do diretório corrente)
/tmp/scripts/sistema.sh (indicando o caminho completo para execução)
Permissão negada
O Shell encontrou seu script, mas ele não é um executável, use o comando chmod para torna-lo um
executável como mostra a seguir:
chmod +x ./sistema.sh
Erro de Sintaxe
O Shell encontrou e executou seu script, porém 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
não foram fechadas. A própria mensagem informa o numero da linha onde o erro foi encontrado.
Página 8
Aprendendo Shell Script
Melhorando o Script para o usuário
Executar os três comandos seguindo resulta em um bolo de texto na tela, misturando as
informações e dificultando o entendimento. É preciso trabalhar um pouco a saída do script, tornando-a mais
amigável.
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 Horário:”
date
echo
echo “Uso do Disco:”
df
echo
echo “Usuário Conectado:”
who
Para usar co comando echo, basta colocar o texto entre “aspas”. Se nenhum texto for colocado,
uma linha em branco é mostrada, mais não esqueça de fechar as aspas pois caso esqueça isso ira gerar
um erro de sintaxe.
Página 9
Aprendendo Shell Script
Conceito de Variáveis em
Shell Script
As variáveis são posições na memória do computador onde ficam armazenadas n temporariamente algum valor
para ser usadas por programas ou scripts que no Linux são precedidas pelo caractere dólar $. No Linux existem dois
tipos de variáveis: Variáveis do sistema – criadas e gerenciadas pelo próprio Linux e são definidas em letras
MAIÚSCULAS, onde visualiza-las pelos comandos printenv e env tais como: HOME, USER ou USERNAME, SHELL e etc
Variáveis definidas pelo usuário – criadas e gerenciadas pelo usuário e são definidas em letras minúsculas ou
MAIÚSCULAS.
Variáveis do sistema Você pode ver as variáveis do sistema com os comandos printenv, env e set como mostra o
exemplo abaixo:
$ printenv
Página 10
Aprendendo Shell Script
$ env
Algumas variáveis do sistema
SHELL - Exibe o nome do shell
HOME - Exibe o diretório home do usuário
USER ou USERNAME - Exibe o nome do usuário
LOGNAME - Exibe o login do usuário
LANG - Exibe o idioma do sistema
OSTYPE - Exibe a arquitetura do sistema
Você também pode exibir qualquer variável ambiente do sistema com o comando echo como mostra o
exemplo abaixo:
echo $HOME
echo $PATH
Obs: Nunca esqueça que variáveis do sistema tem que ter seus caracteres em maiúsculo.
Página 11
Aprendendo Shell Script
Variáveis definidas pelo usuário
O nome de variáveis podem começar com uma letra do alfabeto (a, b, c, …) ou com underline_,
sendo que o shell é sensitive case, ou seja, diferencia minúsculo de maiúsculo, portanto A é diferente de a.
Para exibir o valor de uma variável através do comando echo é necessário especificar o sinal de
dólar $ antes do nome da variável ($a). Outro detalhe é que não é permitido espaços em branco (a =10 ou
a= 10 ou a = 10) ou iniciar uma variável com um valor numérico (1a=10) , abaixo seguem exemplos de
variáveis O bash reconhece uma variável quando ela começa com $, ou seja, a diferença entre ‘palavra’ e
‘$palavra’ é que a primeira é uma palavra qualquer, e a outra uma variável. Para definir uma variável,
utilizamos a seguinte sintaxe:
$ variavel=valor_da_variavel
O ‘valor’ será atribuído a ‘variável ‘. Valor pode ser uma frase, números, e até outras variáveis e
comandos. O valor pode ser expressado entre as aspas (“”), apóstrofos (”) ou crases (“). As aspas vão
interpretar as variáveis que estiverem dentro do valor, os apóstrofos lerão o valor literalmente, sem
interpretar nada, e as crases vão interpretar um comando e retornar a sua saída para a variável.
OBS: \(barra) invertida com a variável ao seu lado(\$A), retorna o próprio nome da variável no momento da
execução do script como mostra o script abaixo:
Página 12
Aprendendo Shell Script
Exemplo de código com variável de ambiente:
#!/bin/bash
variavel="Eu estou logado como usuário $user"
echo $variavel
variavel="Meu diretório atual é o `pwd`"
echo $variavel
Se você quiser criar um script em que o usuário deve interagir com ele, é possível que você queira
que o próprio usuário defina uma variável, e para isso usamos o comando read, que dará uma pausa no
script e ficarará esperando o usuário digitar algum valor e teclar enter como mostra o exemplo:
#!/bin/bash
echo “Qual seu o dia do aniversário?”
read RESPOSTA
echo “Você faz aniversário no dia”
echo $RESPOSTA
Variáveis especiais
$0 – Exibe o nome do programa ou script que está sendo executado
$? – Exibe o estado de saída do último comando executado
$$ – Exibe o número do processo do script que está sendo executado
$# – Exibe o número de parâmetros fornecido para um comando
$! – Exibe o número do último processo que está sendo executado em background
$* – Exibe todos os parâmetros separados por espaços em branco
$@ – Idêntico ao anterior ($*)
$- – Opções correntes definidas pelo shell
Página 13
Aprendendo Shell Script
$_ – Armazena o valor do último parâmetro do comando anterior
$1 a $9 – Exibe a posição do parâmetro de 1 a 9
echo $PWD – Caminho para a directoria actual.
echo $UID - ID do utilizador que iniciou a Shell
echo $SHLVL – Numero de sessões Shell abertas.
echo $REPLY - Contém o último input recebido pela função read não suportado pelo ?SH?
echo $RANDOM – Cria um número aleatório entre 0 e 32767 não suportado pelo ?SH?
echo $PATH – Caminhos de pesquisa para comandos das Shell.
echo $HOME – Caminho para a HOME do utilizador actual.
Exemplos:
Manipulação de string com variáveis.
É possível fazer também referência a valores de variáveis entre { } para separar a variável e dos caracteres
especiais. Veja abaixo:
$variavel - Exibe o valor da variável
${variavel} – Idêntico ao anterior
${#variavel} – Exibe o total de caracteres da variável
${variavel:-texto} – Se a variável não for definida retorna o texto
${variavel:posiçãoX} – Retorna o texto a partir da posição (posiçãoX)
${variavel:posiçãoX:quantidadeX} – Retorna a quantidade (quantidadeX) de caracteres a partir da
posição (posiçãoX)
${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
Página 14
Aprendendo Shell Script
Exemplos:
Outro Exemplo:
Outro Exemplo:
Página 15

Documentos relacionados