Você está na página 1de 29
ADMINISTRA ÇÃ O DE REDES I LINUX Shell Script Frederico Madeira LPIC­1, CCNA fred@madeira.eng.br

ADMINISTRA ÇÃ O DE REDES I LINUX

Shell Script

Frederico Madeira LPIC­1, CCNA fred@madeira.eng.br www.madeira.eng.br

Shell Script Shell “É qualquer interface de usuário para o SO Unix. que receba do

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”

Shell Script Conceitos do Shell Variáveis Armazenam informações durante execução do script - Atribuindo valor

Shell Script

Conceitos do Shell

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

- Atribuindo valor

VARIAVEL=“Teste Linux”

- Exibindo o valor echo $VARIAVEL

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

- Limpando uma variável unset VARIAVEL

- Listando todas as variáveis env ou set

Redirecionamento Shell Script Conceitos do Shell > : Redireciona a saída padrão do comando a

Redirecionamento

Shell Script

Conceitos do Shell

> : 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

Shell Script Conceitos do Shell Redirecionamento saída da erro stderr (2): Saída de Erro. Para

Shell Script

Conceitos 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 comando Para 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.br1 ping: unknown host www.madeira.eng.br1

Shell Script Conceitos do Shell Redirecionamento saída da erro Comando ok, redir saída de erro

Shell Script

Conceitos do Shell

Redirecionamento saída da erro

Comando ok, redir saída de erro [fred@localhost Linux]$ ping www.madeira.eng.br 2> /dev/null 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=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/null ping: 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

Lógica Shell Script Conceitos do Shell && - equivalente ao E. O próximo comando só

Lógica

Shell Script

Conceitos do Shell

&& - 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

Forma mais elegante:

$ ping -c 1 www.madeira.eng.br

“Site fora do ar”

&& echo “Site está ok” || echo “Site fora do ar”

&> /dev/null && echo “Site está ok” || echo

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

Teste Condicional – IF Shell Script Conceitos do Shell if [ “$NOME” = “Fred” ]

Teste Condicional – IF

Shell Script

Conceitos do Shell

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”

Shell Script Conceitos do Shell Teste Condicional – Case Permite a comparação de uma variável

Shell Script

Conceitos do Shell

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

case $VALOR in

1)

echo “Você escolheu 1” ;;

2)

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

esac

Shell Script Testes para test e if   Testes em arquivos   Testes em variáveis

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)

Erros Comuns na Execução - Comando não encontrado Shell Script - Script não encontra-se em

Erros Comuns na Execução

- Comando não encontrado

Shell Script

- 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

Shell Script Boas Práticas na escrita de Shell Scripts - Comente o código - Deixe

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

Exemplo de Shell Script vi status.sh Shell Script #!/bin/bash # Define o interpretador dos comandos

Exemplo de Shell Script

vi status.sh

Shell Script

#!/bin/bash # Define o interpretador dos comandos date df -h free

Executando o Shell Script

- O script deve ser executável.

$ chmod +x status.sh

$ ./status.sh

Melhorando a saída na tela vi status.sh Shell Script #!/bin/bash # Define o interpretador dos

Melhorando a saída na tela

vi status.sh

Shell Script

#!/bin/bash # Define o interpretador dos comandos echo “Data/Hora:” date echo “Espaço livre nas partições do sistema:” df -h echo “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”

Interagindo com o Usuário vi status.sh Shell Script #!/bin/bash # Define o interpretador dos comandos

Interagindo com o Usuário

vi status.sh

Shell Script

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

Melhorando o código Shell Script #!/bin/bash # Define o interpretador dos comandos # Shell Script

Melhorando o código

Shell Script

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

# Shell Script que exibe informações sobre disco/memória

# Desenvolvido por: Frederico Madeira <fred@madeira.eng.br>

# Pede confirmação antes de executar o shell

echo “Verificação do sistema, devo prosseguir [sn] ?”

read RESPOSTA

# Se foi digitado “n”, encerre o script

test “$RESPOSTA” = “n” && exit

# Data e hora corrente

echo “Data/Hora:” date

# Exibe informação sobre a partição

echo “Espaço livre nas partições do sistema:” df -h

# Exibe informação sobre a memória

echo “Memória disponível no sistema:” free

Prática 1 Shell Script Faça um script chamado "testa-arquivos.sh", que pede ao usuário para digitar

Prática 1

Shell Script

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

Exemplo de uso:

$ testa-arquivos Digite o arquivo: /etc/passwd

O arquivo digitado foi /etc/passwd

Resposta Prática 1 Shell Script #!/bin/bash # Define o interpretador dos comandos # Este script

Resposta Prática 1

Shell Script

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

# Este script recebe um nome de um arquivo como input do usuário

# Desenvolvido por: Frederico Madeira <fred@madeira.eng.br>

# Pede confirmação antes de executar o shell

echo -n “Digite o nome do arquivo :” read FILE

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

Prática 2 Shell Script Melhore o script "testa-arquivos.sh", que pede ao usuário para digitar um

Prática 2

Shell Script

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-arquivos

Digite o arquivo: /naoexiste O arquivo '/naoexiste' não foi encontrado

$ testa-arquivos

Digite o arquivo: /tmp /tmp é um diretório

$ testa-arquivos

Digite o arquivo: /etc/passwd

/etc/passwd é um arquivo

Resposta Prática 2 Shell Script #!/bin/bash # Define o interpretador dos comandos # Este script

Resposta Prática 2

Shell Script

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

# Este script recebe um nome de um arquivo como input do usuário

# Desenvolvido por: Frederico Madeira <fred@madeira.eng.br>

# Pede confirmação antes de executar o shell

echo -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ório

test -d "$FILE" && echo "$FILE é um diretório"

# Testa se é um arquivo

test -f

# Testa se existe

test ! -e "$FILE" && echo "$FILE não existe"

"$FILE" && echo "$FILE é um arquivo"

Prática 3 Shell Script Melhore o script "testa-arquivos.sh", que pede ao usuário para digitar um

Prática 3

Shell Script

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-arquivos

Digite o arquivo: /naoexiste O arquivo '/naoexiste' não foi encontrado

$ testa-arquivos

Digite o arquivo: /tmp /tmp é um diretório

$ testa-arquivos

Digite o arquivo: /etc/passwd

/etc/passwd é um arquivo

Resposta Prática 3 Shell Script # Realização dos testes: if [ -d "$RESP" ] then

Resposta Prática 3

Shell Script

# 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

fi

fi

Prática 4 Shell Script Crie um script que exiba informações sobre o sistema. Ele deve

Prática 4

Shell Script

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

1) Espaço livre nos discos 2) Status da Memória do sistema 3) Informações sobre o Processador 4) Endereço IP 5) Quem está logado no sistema

Resposta Prática 4 Shell Script #!/bin/bash # Define o interpretador dos comandos # Exibição do

Resposta Prática 4

Shell Script

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

# Exibição do Menu

echo "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ário read OPCAO

Resposta Prática 4 - Cont Shell Script # Trata a opção escolhida pelo usuário case

Resposta Prática 4 - Cont

Shell Script

# Trata a opção escolhida pelo usuário case $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

Prática 5 Shell Script Crie um script que faça um backup da pasta /etc e

Prática 5

Shell Script

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 computador AAAA = ano com 4 dígitos MM = mês com 2 dígitos DD = dia com 2 dígitos

Resposta Prática 5 Shell Script Através do man do comando date vemos que: $ date

Resposta Prática 5

Shell Script

Através do man do comando date vemos que:

$ date +%d

27

$ date +%m

03

$ date +%Y

03

#!/bin/bash #Definição de variáveis

IP=192.168.0.XX

DIA=`date +%d` MES=`date +%m` ANO=`date +%Y` ARQUIVO_BKP= “bkp_etc_$IP_$ANO$MES$DIA.tar.gz” DIR_TMP=”/tmp”

Resposta Prática 5 - Cont Shell Script # REALIZANDO BACKUP # Acesso o diretório temporário

Resposta Prática 5 - Cont

Shell Script

# REALIZANDO BACKUP

# Acesso o diretório temporário

cd $DIR_TMP

# Faço o backup da pasta

tar cvfz $ARQUIVO_BKP /etc

# ENVIANDO VIA NFS

# Criação do pto de montagem mkdir /media/rede

# montanto a pasta NFS

mount -t nfs 192.168.0.xx:/dir /media/rede

# Copiando o arquivo de backup para o servidor e se tiver sucesso, remova o

# arquivo original

cp $ARQUIVO_BKP /media/rede && rm $ARQUIVO_BKP

# Desmontando a pasta

umount /media/rede

ADMINISTRA ÇÃ O DE REDES I LINUX Shell Script Frederico Madeira LPIC­1, CCNA fred@madeira.eng.br

ADMINISTRA ÇÃ O DE REDES I LINUX

Shell Script

Frederico Madeira LPIC­1, CCNA fred@madeira.eng.br www.madeira.eng.br