aula 14 - shellscript

29
ADMINISTRAÇÃO DE REDES I LINUX Shell Script Frederico Madeira LPIC-1, CCNA [email protected] www.madeira.eng.br

Upload: jose-silva

Post on 03-Dec-2015

244 views

Category:

Documents


1 download

DESCRIPTION

ShellScript

TRANSCRIPT

Page 1: Aula 14 - ShellScript

ADMINISTRAÇÃO DE REDES ILINUX

Shell Script

Frederico MadeiraLPIC­1, CCNA

[email protected]

Page 2: Aula 14 - ShellScript

Shell Script

Shell

“É qualquer interface de usuário para o SO Unix. que receba do usuário um input e a converta em instrução para que o SO entenda.”

Shell Script

“É um arquivo que contém uma série de comandos, funções, rotinas que são executadas quando o shell script é executado.Se digitarmos comando a comando diretamente no shell, o resultado será o mesmo”

Page 3: Aula 14 - ShellScript

Shell ScriptConceitos do Shell

VariáveisArmazenam informações durante execução do script

- Atribuindo valorVARIAVEL=“Teste Linux”

- Exibindo o valorecho $VARIAVEL

- Atribuindo a saída de um comandoVARIAVEL=$(date)VARIAVEL=`date`

- Limpando uma variávelunset VARIAVEL

- Listando todas as variáveisenv ou set

Page 4: Aula 14 - ShellScript

Shell ScriptConceitos do Shell

Redirecionamento

> : Redireciona a saída padrão do comando a esquerda para o arquivo a direita, sobrescrevendo todo o conteúdo.

>> : Redireciona a saída padrão do comando a esquerda para o arquivo a direita, adicionando o conteúdo ao final do arquivo.

| : Pipe, redireciona a saída padrão do primeiro comando para a entrada padrão do segundo comando.

Ex:

$ cat /etc/passwd | grep root > /tmp/root

$ ping -c 1 www.madeira.eng.br > /dev/null

OBS: /dev/null , representa lugar nenhum

Page 5: Aula 14 - ShellScript

Shell ScriptConceitos do Shell

Redirecionamento saída da erro

stderr (2): Saída de Erro.Para redirecionar a saída de erro, usamos: 2>

stdout(1): Saída do comandoPara redirecionar a saída do comando, usamos: 1>

Para redirecionar ambas usamos: &>

Ex:

Saída do comando[fred@localhost Linux]$ ping www.madeira.eng.br PING www.madeira.eng.br (69.16.250.4) 56(84) bytes of data.64 bytes from noc88.noc88.com (69.16.250.4): icmp_seq=1 ttl=45 time=300 ms

Saída de erro[fred@localhost Linux]$ ping www.madeira.eng.br1ping: unknown host www.madeira.eng.br1

Page 6: Aula 14 - ShellScript

Shell ScriptConceitos do Shell

Redirecionamento saída da erro

Comando ok, redir saída de erro[fred@localhost Linux]$ ping www.madeira.eng.br 2> /dev/nullPING www.madeira.eng.br (69.16.250.4) 56(84) bytes of data.64 bytes from noc88.noc88.com (69.16.250.4): icmp_seq=1 ttl=45 time=250 ms

Comando errado, redir saída de erro[fred@localhost Linux]$ ping -c 1 www.madeira.eng.br1 2> /dev/null

Comando ok, redir saída do comando[fred@localhost Linux]$ ping -c 1 www.madeira.eng.br 1> /dev/null

Comando errado, redir saída do comando[fred@localhost Linux]$ ping -c 1 www.madeira.eng.br1 1> /dev/nullping: unknown host www.madeira.eng.br1

Comando ok, redir saída do comando e saída de erro[fred@localhost Linux]$ ping -c 1 www.madeira.eng.br &> /dev/null

Comando errado, redir saída do comando e saída de erro[fred@localhost Linux]$ ping -c 1 www.madeira.eng.br1 &> /dev/null

Page 7: Aula 14 - ShellScript

Shell ScriptConceitos do Shell

Lógica

&& - equivalente ao E. O próximo comando só será executado se o anterior tiver sido bem sucedido.

|| - equivalente ao OU. Se o comando anterior não for bem sucedido, será executado o próximo comando. OU um OU outro.

Ex:$ ping -c 1 www.madeira.eng.br && echo “Site está ok” || echo “Site fora do ar” Forma mais elegante:$ ping -c 1 www.madeira.eng.br &> /dev/null && echo “Site está ok” || echo “Site fora do ar”

$ mkfs.ext3 /dev/sda1 && echo “Formatação OK” || echo “Erro na formatação”

Page 8: Aula 14 - ShellScript

Shell ScriptConceitos do Shell

Teste Condicional – IF

if [ “$NOME” = “Fred” ] then echo “Seja bem vindo Fred”else echo “Acesso não Permitido”fi

Teste Condicional – TEST

test “CONDIÇÂO” && echo “Condição verdadeira” || echo “Condição falsa”

Page 9: Aula 14 - ShellScript

Shell ScriptConceitos do Shell

Teste Condicional – CasePermite a comparação de uma variável com muitos valores

case $VALOR in1) echo “Você escolheu 1”;;2)echo “Você escolheu 2”;;*) echo “Você não escolheu nem 1 e nem 2”;;

esac

Page 10: Aula 14 - ShellScript

Shell Script

Testes para test e if

Testes em arquivos Testes em variáveis-b é um dispositivo de bloco -c é um dispositivo de caractere Comparação Numérica-d é um diretório -lt é menor que (LessThan)-e o arquivo existe -gt é maior que (GreaterThan)-f é um arquivo normal -le é menor igual (LessEqual)-g o bit SGID está ativado -ge é maior igual (GreaterEqual)-G o grupo do arquivo é o do usuário atual -eq é igual (EQual)-k o sticky-bit está ativado -ne é diferente (NotEqual)-L o arquivo é um link simbólico -O o dono do arquivo é o usuário atual Comparação de Strings-p o arquivo é um named pipe “=” é igual-r o arquivo tem permissão de leitura != é diferente-s o tamanho do arquivo é maior que zero -n é não nula-S o arquivo é um socket -z é nula-t o descritor de arquivos N é um terminal -u o bit SUID está ativado Operadores Lógicos-w o arquivo tem permissão de escrita ! NÃO lógico (NOT)-x o arquivo tem permissão de execução -a E lógico (AND)-nt o arquivo é mais recente (NewerThan) -o OU lógico (OR)-ot o arquivo é mais antigo (OlderThan)-ef o arquivo é o mesmo (EqualFile)

Page 11: Aula 14 - ShellScript

Shell Script

Erros Comuns na Execução

- Comando não encontrado- Script não encontra-se em um diretório existente no $PATH- Tente executá-lo usando o caminho absoluto- Tente executá-lo usando ./

- Permissão Negada- Atribua permissão de execução ao shell script

- Erro de Sintaxe- O Script foi executado, porém, algum dos comandos existentes nele estão

especificados incorretamente

Page 12: Aula 14 - ShellScript

Shell Script

Boas Práticas na escrita de Shell Scripts

- Comente o código

- Deixe o código organizado

- Separe o código usando funções (Se necessário)

- Trate a Saída

Page 13: Aula 14 - ShellScript

Shell Script

Exemplo de Shell Script

vi status.sh

#!/bin/bash # Define o interpretador dos comandosdatedf -hfree

Executando o Shell Script

- O script deve ser executável.$ chmod +x status.sh$ ./status.sh

Page 14: Aula 14 - ShellScript

Shell Script

Melhorando a saída na tela

vi status.sh

#!/bin/bash # Define o interpretador dos comandosecho “Data/Hora:”dateecho “Espaço livre nas partições do sistema:”df -hecho “Memória disponível no sistema:”free

OBS: A opção -n no comando echo não emite uma nova linha ao final do

conteúdo ecoado.

Ex: echo -n “xyz”

Page 15: Aula 14 - ShellScript

Shell Script

Interagindo com o Usuário

vi status.sh

#!/bin/bash # Define o interpretador dos comandosecho “Verificação do sistema, devo prosseguir [sn] ?”read RESPOSTAtest “$RESPOSTA” = “n” && exitecho “Data/Hora:”dateecho “Espaço livre nas partições do sistema:”df -hecho “Memória disponível no sistema:”free

Page 16: Aula 14 - ShellScript

Shell Script

Melhorando o código

#!/bin/bash # Define o interpretador dos comandos# Shell Script que exibe informações sobre disco/memória# Desenvolvido por: Frederico Madeira <[email protected]>

# Pede confirmação antes de executar o shellecho “Verificação do sistema, devo prosseguir [sn] ?”read RESPOSTA

# Se foi digitado “n”, encerre o scripttest “$RESPOSTA” = “n” && exit

# Data e hora correnteecho “Data/Hora:”date

# Exibe informação sobre a partiçãoecho “Espaço livre nas partições do sistema:”df -h

# Exibe informação sobre a memóriaecho “Memória disponível no sistema:”free

Page 17: Aula 14 - ShellScript

Shell Script

Prática 1

Faça um script chamado "testa-arquivos.sh", que pede ao usuário para digitar um arquivo

Exemplo de uso:

$ testa-arquivosDigite o arquivo: /etc/passwd

O arquivo digitado foi /etc/passwd

Page 18: Aula 14 - ShellScript

Shell Script

Resposta Prática 1

#!/bin/bash # Define o interpretador dos comandos# Este script recebe um nome de um arquivo como input do usuário# Desenvolvido por: Frederico Madeira <[email protected]>

# Pede confirmação antes de executar o shellecho -n “Digite o nome do arquivo :”read FILE

# Informa o nome do arquivo digitado.Echo “O arquivo digitado foi$FILE”

Page 19: Aula 14 - ShellScript

Shell Script

Prática 2

Melhore o script "testa-arquivos.sh", que pede ao usuário para digitar um arquivo e testa se este arquivo existe. Se sim, diz se é um arquivo ou um diretório. Utilize o comando test.Exemplo de uso:

$ testa-arquivosDigite o arquivo: /naoexisteO arquivo '/naoexiste' não foi encontrado

$ testa-arquivosDigite o arquivo: /tmp/tmp é um diretório

$ testa-arquivosDigite o arquivo: /etc/passwd/etc/passwd é um arquivo

Page 20: Aula 14 - ShellScript

Shell Script

Resposta Prática 2

#!/bin/bash # Define o interpretador dos comandos# Este script recebe um nome de um arquivo como input do usuário# Desenvolvido por: Frederico Madeira <[email protected]>

# Pede confirmação antes de executar o shellecho -n “Digite o nome do arquivo :”read FILE

# Informa o nome do arquivo digitado.Echo “O arquivo digitado foi$FILE”

# Realização dos testes:# Testa se é um diretóriotest -d "$FILE" && echo "$FILE é um diretório"# Testa se é um arquivotest -f "$FILE" && echo "$FILE é um arquivo"# Testa se existetest ! -e "$FILE" && echo "$FILE não existe"

Page 21: Aula 14 - ShellScript

Shell Script

Prática 3

Melhore o script "testa-arquivos.sh", que pede ao usuário para digitar um arquivo e testa se este arquivo existe. Se sim, diz se é um arquivo ou um diretório. Utilize o comando if.Exemplo de uso:

$ testa-arquivosDigite o arquivo: /naoexisteO arquivo '/naoexiste' não foi encontrado

$ testa-arquivosDigite o arquivo: /tmp/tmp é um diretório

$ testa-arquivosDigite o arquivo: /etc/passwd/etc/passwd é um arquivo

Page 22: Aula 14 - ShellScript

Shell Script

Resposta Prática 3

# Realização dos testes:if [ -d "$RESP" ]then echo "$RESP é um diretório"else if [ -f "$RESP" ] then echo "$RESP é um arquivo" else if [ ! -e "$RESP" ] then echo "$RESP nao existe" fi fifi

Page 23: Aula 14 - ShellScript

Shell Script

Prática 4

Crie um script que exiba informações sobre o sistema. Ele deve ter a seguinte interface:

1) Espaço livre nos discos2) Status da Memória do sistema3) Informações sobre o Processador4) Endereço IP5) Quem está logado no sistema

Page 24: Aula 14 - ShellScript

Shell Script

Resposta Prática 4

#!/bin/bash # Define o interpretador dos comandos

# Exibição do Menuecho "1) Espaço Livre nos Discos"echo "2) Status da Memória do Sistema"echo "3) Informações sobre o Processador"echo "4) Endereço IP"echo "5) Quem está logado no sistema"echo ""echo -n "Escolha a opção: "

# Leitura da opção do usuárioread OPCAO

Page 25: Aula 14 - ShellScript

Shell Script

Resposta Prática 4 - Cont

# Trata a opção escolhida pelo usuáriocase $OPCAO in 1) df -h ;; 2) free ;; 3) cat /proc/cpuinfo ;; 4) /sbin/ifconfig ;; 5) w ;; *) echo "Não foi escolhida uma opção válida" ;;esac

Page 26: Aula 14 - ShellScript

Shell Script

Prática 5

Crie um script que faça um backup da pasta /etc e envie para um servidor remoto via NFS.O nome do arquivo de backup deve ser: bkp_etc_IP_AAAAMMDD.tar.gz, onde:IP=IP do computadorAAAA = ano com 4 dígitosMM = mês com 2 dígitosDD = dia com 2 dígitos

Page 27: Aula 14 - ShellScript

Shell Script

Resposta Prática 5

Através do man do comando date vemos que:

$ date +%d27$ date +%m03$ date +%Y03

#!/bin/bash#Definição de variáveisIP=192.168.0.XXDIA=`date +%d`MES=`date +%m`ANO=`date +%Y`ARQUIVO_BKP= “bkp_etc_$IP_$ANO$MES$DIA.tar.gz”DIR_TMP=”/tmp”

Page 28: Aula 14 - ShellScript

Shell Script

Resposta Prática 5 - Cont

# REALIZANDO BACKUP# Acesso o diretório temporáriocd $DIR_TMP# Faço o backup da pastatar cvfz $ARQUIVO_BKP /etc

# ENVIANDO VIA NFS# Criação do pto de montagemmkdir /media/rede# montanto a pasta NFSmount -t nfs 192.168.0.xx:/dir /media/rede# Copiando o arquivo de backup para o servidor e se tiver sucesso, remova o # arquivo originalcp $ARQUIVO_BKP /media/rede && rm $ARQUIVO_BKP# Desmontando a pastaumount /media/rede

Page 29: Aula 14 - ShellScript

ADMINISTRAÇÃO DE REDES ILINUX

Shell Script

Frederico MadeiraLPIC­1, CCNA

[email protected]