SlideShare uma empresa Scribd logo
1 de 29
Baixar para ler offline
Fundamentos de Programação Aplicada a Redes ­ 
Shell Script
Controle de Fluxo
                                       Frederico Madeira
                                     LPIC­1, LPIC­2, CCNA
                                     fred@madeira.eng.br
                                      www.madeira.eng.br
Saída e Código de Saída

✔   O comando utilizado para terminar um script é o exit
✔   Ele pode ser utilizado para retornar um valor
✔   Todo comando retorna um status
     ✔ Se finalizado com sucesso o exit code é 0
     ✔ Se finalizado com falha, o exit code é um valor numérico diferente de
       zero


#!/bin/bash
echo “Teste exit code”              Retornará 0 indicando que o comando foi ok.
echo $?

lskdf # Comando desconhecido         Retornará um valor diferente de 0 indicando
echo $?                                               um erro

exit 113 # Irá retornar 113 para o shell.
Por convenção, os comandos retornam 0 para indicar sucesso ou
retornam um valor diferente de zero para indicar um erro ou uma
condição de erro
Condicionais: TEST e IF

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”
Condicionais: TEST e IF

Exemplo IF:

 #!/bin/bash

 echo -n "Digite seu primeiro nome: "
 read NOME

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

 exit 0
Condicionais: TEST e IF

Exemplo TEST:



 #!/bin/bash

 echo “Verificação do sistema, devo prosseguir [s/n] ?”
 read RESPOSTA

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

 echo "bla bla bla"

 exit 0
Condicionais: 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)
Condicionais: TEST e IF

Prática: Script idade.sh

Escreva um script que pergunte sua idade, pergunte seu sexo e seu nome
de usuário neste sistema.

Informar:

- É maior de idade ?
- Seu sexo é masculino ou feminino ?
- Possui um diretório home neste servidor ?

PS: Faça duas versões, uma usando if e outra usando test
Condicionais: TEST e IF
Resposta: Script idade.sh



#!/bin/bash

echo "------------------------------------------------------"   if [ "$SEXO" = "M" ]
echo -n "Qual sua idade ? "                                     then
read IDADE                                                            echo "Sexo Masculino"
echo -n "Qual seu sexo [M/F]? "                                 else
read SEXO                                                             echo "Sexo Feminino"
echo -n "Qual é seu nome de usuário ? "                         fi
read USUARIO
echo "------------------------------------------------------"   if [ -d "/home/$USUARIO" ]
echo""                                                          then
                                                                       echo "Você possui o home: /home/$USUARIO"
if [ $IDADE -ge 18 ]                                            else
then                                                                   echo "Você nao possui um home neste sistema"
        echo "Você é MAIOR de idade";                           fi
else
       echo "Você é MENOR de idade";                            exit 0
fi
Condicionais: TEST e IF
  Resposta: Script idade.sh
#!/bin/bash

echo "------------------------------------------------------"
echo -n "Qual sua idade ? "
read IDADE
echo -n "Qual seu sexo [M/F]? "
read SEXO
echo -n "Qual é seu nome de usuário ? "
read USUARIO
echo "------------------------------------------------------"
echo""

test $IDADE -ge 18 && echo "Você é MAIOR de idade" || echo "Você é MENOR de idade"

test "$SEXO" = "M" && echo "Sexo Masculino" || echo "Sexo Feminino"

test -d "/home/$USUARIO" && echo "Você possui um home: /home/$USUARIO" ||
 echo "Você não possui um home neste sistema"

exit 0
Condicionais: TEST e IF

Prática: Script backup.sh

Melhore o script backup.sh desenvolvido anteriormente e informe ao final
uma mensagem informando se o backup foi concluído com sucesso e se
o arquivo existe realmente no local indicado.
Condicionais: TEST e IF
 Resposta: Script backup.sh

#!/bin/bash

OUT_DIR=/opt/backup/
HOSTNAME=$(hostname)
AGORA=$(date +"%Y%m%d-%H%m")
BKP_FILE="sysbkp_$HOSTNAME_$AGORA.tar.gz"
DIRS="/etc /home /var/www/var/lib/mysql"
                                                if [ -e “$OUT_DIR/$BKP_FILE” ]
                                                then
echo "Realizando backup do sistema...."
                                                      echo “arquivo existe”
cd $OUT_DIR
                                                else
tar cvfz $BKP_FILE $DIRS
                                                      echo “arquivo não existe”
                                                fi
If [ “$?” != 0 ]
then
          echo “Falha na execução do Backup”
else
          echo “Backup executado com sucesso”
fi
Condicionais: CASE

Permite a comparação de uma variável com muitos valores

Sintaxe:


case $VALOR in
   1)
   echo “Você escolheu 1”
   ;;
   2)
   echo “Você escolheu 2”
   ;;
   *)
   echo “Você não escolheu nem 1 e nem 2”
   ;;
esac
Condicionais: CASE

Exemplo::


#!/bin/bash

echo ""
echo "Escolha uma das seguintes pessoas"
echo ""
echo "--------------------------------"
echo "1. Frederico Madeira"
echo "2. Alberto Viegas"
echo "3. Luciano Cabral"
echo ""
echo -n "Qual deles vocÊ deseja obter iformações: "
read ESCOLHA


                                                      Continua ->
Condicionais: CASE
Exemplo::

case $ESCOLHA in
  1)
     echo ""
     echo "Professor das cadeiras de Linux/Shell/SD e VoIP"
     echo "Email: fred@madeira.eng.br"
     ;;
  2)
     echo ""
     echo "Professor das cadeiras de Linux/Shell/SD e Segurança"
     echo "Email: alviegas@gmail.com"
     ;;
  3)
     echo ""
     echo "Professor das cadeiras de Windows/Redes Ethernet"
     echo "Email: lscabral@gmail.com"
     ;;
  *)
     echo ""
     echo "Qualquer outra opção cai aqui"
     ;;
esac
Condicionais: CASE

Script: sysinfo2.sh

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

ENTRE COM A OPÇÃO DESEJADA:
Condicionais: CASE

Script sysinfo2.sh


#!/bin/bash

# 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                                  Continua ->
Condicionais: CASE

Script sysinfo2.sh


# 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
LOOPS: for

Loop é um bloco de código que se repete para enquanto uma condição
for verdadeira.

Sintaxe:


for arg in [list]
do
    Comando 1
    Comando 2
    Comando 3
    ....
done
LOOPS: for

Exmplo


#!/bin/bash
# Fazendo um loop dada uma sequência numérica

for NUMBER in 1 2 3 4 5 6 7 8 9 10
do
     echo "O número é: $NUMBER"
done
LOOPS: for

Exmplo


#!/bin/bash
# Fazendo um loop através de variáveis

ARQUIVOS="/ect/passwd
/etc/crontab
/etc/sysconfig/network
/etc/fakefile
/opt/sportclube
/usr/sbin/shutdown"

for LISTA in $ARQUIVOS
do
     echo "O arquivo é: $LISTA"

done
LOOPS: for

Exmplo


#!/bin/bash
# Fazendo um loop através de variáveis carregadas dinamicamente


echo -n "Informe um diretório: "
read DIR

LISTA=$(ls $DIR)
for ARQ in $LISTA
do
     echo "O arquivo é: $ARQ"
done
LOOPS: for

Script: file_exist.sh

Faça um script que verifique se a lista de arquivos abaixo existe e informe ao
usuário.

/ect/passwd
/etc/crontab
/etc/sysconfig/network
/etc/fakefile
/opt/sportclube
/usr/sbin/shutdown
LOOPS: for

Script: file_exist.sh

#!/bin/bash

ARQUIVOS="/ect/passwd
/etc/crontab
/etc/sysconfig/network
/etc/fakefile
/opt/sportclube
/usr/sbin/shutdown"

for LISTA in $ARQUIVOS
do
     if [ -e "$LISTA" ]
     then
            echo "$LISTA existe"
     else
            echo "$LISTA não existe"
     fi
done
LOOPS: for

Script: ping_hosts.sh

Salve a lista abaixo no arquivo hosts.lst e envie 1 pacote ICMP para cada um,
ao final informe se o host está ativo ou não. Ordene os hosts em ordem
alfabética antes de começar a executar os pings.

Www.madeira.eng.br
Www.uol.com.br
Www.linux.com
Www.fedoraproject.og
Www.terra.com.br
www.jc.com.br

Dica: Faça verificação do exit code de cada comando ping
LOOPS: for

Script: file_exist.sh

#!/bin/bash

LISTA=$(sort hosts.lst)

for HOST in $LISTA
do
     ping -c 1 $HOST &> /dev/null && echo "Host $HOST está
ativo" || echo "HOST $HOST está offline"
done
LOOPS: for

Script: new_ls.sh

Escreva um script que solicite ao usuário um diretório, informe para cada
objeto encontrado neste diretório:
   - se ele é um diretório
   - Se é um arquivo
   - Se é um link,
   - Se for arquivo, informe se seu tamanho é maior do que zero.

O diretório pode ser informado como parâmetro para o comando ou de forma
interativa para o usuário
Valide se o diretório informado existe ou não

Dicas:

$* - Lista dos Argumentos passados
$# - Quantidade de argumentos passados
$1 - Primeiro Argumento
$2 – Segundo Argumento
LOOPS: for

Script: new_ls.sh

#!/bin/bash

if [ -z "$1" ]
then
       # entra aqui se não for passado parâmetro
       echo -n "Insira o diretório desejado: "
       read DIR
else
       # entra aqui se for passada algum parametro
       DIR=$1
fi
LOOPS: for
if [ -d "$DIR" ]
then
       # Se for um diretório váldio, executa
       LISTA=$(ls $DIR)
       for ARG in $LISTA
       do
            if [ -d "$DIR/$ARG" ]
            then
                   echo "$ARG - Diretório"
            else
                   if [ -L "$DIR/$ARG" ]
                   then
                          echo "$ARG - Link"
                   else
                          if [ -e "$DIR/$ARG" ]
                          then
                                 echo -n "$ARG - Arquivo - "
                                 if [ -f "$DIR/$ARG" ]
                                 then
                                       echo "Arquivo maior do que zero"
                                 else
                                       echo "Arquivo zerado"
                                 fi
                          fi
                   fi
            fi
       done
else
       # Nao é um diretório válido
       echo "O diretório informado não existe"
       exit 127
fi
Fundamentos de Programação Aplicada a Redes ­ 
Shell Script
Controle de Fluxo
                                       Frederico Madeira
                                     LPIC­1, LPIC­2, CCNA
                                     fred@madeira.eng.br
                                      www.madeira.eng.br

Mais conteúdo relacionado

Mais procurados

Trabalho so m4 rui faria
Trabalho so m4   rui fariaTrabalho so m4   rui faria
Trabalho so m4 rui fariaRuiFaria38
 
O Que é Shell (bash)
O Que é Shell (bash)O Que é Shell (bash)
O Que é Shell (bash)Sérgio Silva
 
Introdução aos comandos Linux
Introdução aos comandos LinuxIntrodução aos comandos Linux
Introdução aos comandos LinuxCarlos Quadros
 
Comandos Básicos Linux
Comandos Básicos LinuxComandos Básicos Linux
Comandos Básicos LinuxSoftD Abreu
 
Soa cap2 exercicios resolvidos shell
Soa cap2 exercicios resolvidos shellSoa cap2 exercicios resolvidos shell
Soa cap2 exercicios resolvidos shellportal_Do_estudante
 
Introduction to linux
Introduction to linuxIntroduction to linux
Introduction to linuxguilhermeoki
 
YUM, APT-GET, DPKG, RPM
YUM, APT-GET, DPKG, RPMYUM, APT-GET, DPKG, RPM
YUM, APT-GET, DPKG, RPMSoftD Abreu
 
Trabalhando na Linha de comando
Trabalhando na  Linha de comandoTrabalhando na  Linha de comando
Trabalhando na Linha de comandoSoftD Abreu
 
Linux comandos para arquivos e diretórios
Linux   comandos para arquivos e diretóriosLinux   comandos para arquivos e diretórios
Linux comandos para arquivos e diretóriosDanilo Filitto
 
Linux - Instalação de Programas
Linux - Instalação de ProgramasLinux - Instalação de Programas
Linux - Instalação de ProgramasFrederico Madeira
 
Manual comandos
Manual comandosManual comandos
Manual comandosPaulo Rijo
 
Linux comandos diversos
Linux   comandos diversosLinux   comandos diversos
Linux comandos diversosDanilo Filitto
 

Mais procurados (20)

Trabalho so m4 rui faria
Trabalho so m4   rui fariaTrabalho so m4   rui faria
Trabalho so m4 rui faria
 
Aula 06 comandos linux
Aula 06   comandos linuxAula 06   comandos linux
Aula 06 comandos linux
 
O Que é Shell (bash)
O Que é Shell (bash)O Que é Shell (bash)
O Que é Shell (bash)
 
Introdução aos comandos Linux
Introdução aos comandos LinuxIntrodução aos comandos Linux
Introdução aos comandos Linux
 
Comandos Linux Parte 2
Comandos Linux Parte 2Comandos Linux Parte 2
Comandos Linux Parte 2
 
Comandos Básicos Linux
Comandos Básicos LinuxComandos Básicos Linux
Comandos Básicos Linux
 
Comandos linux
Comandos linuxComandos linux
Comandos linux
 
Soa cap2 exercicios resolvidos shell
Soa cap2 exercicios resolvidos shellSoa cap2 exercicios resolvidos shell
Soa cap2 exercicios resolvidos shell
 
Introduction to linux
Introduction to linuxIntroduction to linux
Introduction to linux
 
Comandos Linux Parte 1
Comandos Linux Parte 1Comandos Linux Parte 1
Comandos Linux Parte 1
 
Comandos linux
Comandos linux Comandos linux
Comandos linux
 
YUM, APT-GET, DPKG, RPM
YUM, APT-GET, DPKG, RPMYUM, APT-GET, DPKG, RPM
YUM, APT-GET, DPKG, RPM
 
Trabalhando na Linha de comando
Trabalhando na  Linha de comandoTrabalhando na  Linha de comando
Trabalhando na Linha de comando
 
Tr.01.comandos part1
Tr.01.comandos part1Tr.01.comandos part1
Tr.01.comandos part1
 
Apache proxy
Apache proxyApache proxy
Apache proxy
 
Linux comandos para arquivos e diretórios
Linux   comandos para arquivos e diretóriosLinux   comandos para arquivos e diretórios
Linux comandos para arquivos e diretórios
 
Linux - Instalação de Programas
Linux - Instalação de ProgramasLinux - Instalação de Programas
Linux - Instalação de Programas
 
Manual comandos
Manual comandosManual comandos
Manual comandos
 
Linux comandos diversos
Linux   comandos diversosLinux   comandos diversos
Linux comandos diversos
 
Comandos linux
Comandos linuxComandos linux
Comandos linux
 

Destaque

Alta Disponibilidade utilizando Pacemaker e DRBD
Alta Disponibilidade utilizando Pacemaker e DRBDAlta Disponibilidade utilizando Pacemaker e DRBD
Alta Disponibilidade utilizando Pacemaker e DRBDFrederico Madeira
 
SI - Sistemas Distribuídos - Apresentação da disciplina
SI - Sistemas Distribuídos - Apresentação da disciplinaSI - Sistemas Distribuídos - Apresentação da disciplina
SI - Sistemas Distribuídos - Apresentação da disciplinaFrederico Madeira
 
configuración del servidor Telnet
configuración del servidor Telnetconfiguración del servidor Telnet
configuración del servidor TelnetGustavo Guerra
 

Destaque (6)

Linux Editor VI
Linux Editor VILinux Editor VI
Linux Editor VI
 
Alta Disponibilidade utilizando Pacemaker e DRBD
Alta Disponibilidade utilizando Pacemaker e DRBDAlta Disponibilidade utilizando Pacemaker e DRBD
Alta Disponibilidade utilizando Pacemaker e DRBD
 
SI - Sistemas Distribuídos - Apresentação da disciplina
SI - Sistemas Distribuídos - Apresentação da disciplinaSI - Sistemas Distribuídos - Apresentação da disciplina
SI - Sistemas Distribuídos - Apresentação da disciplina
 
Linux - Servidor Web Apache
Linux - Servidor Web ApacheLinux - Servidor Web Apache
Linux - Servidor Web Apache
 
Linux - DNS
Linux - DNSLinux - DNS
Linux - DNS
 
configuración del servidor Telnet
configuración del servidor Telnetconfiguración del servidor Telnet
configuración del servidor Telnet
 

Semelhante a Shell Script - Controle de fluxo

Semelhante a Shell Script - Controle de fluxo (20)

Shell Script Linux
Shell Script LinuxShell Script Linux
Shell Script Linux
 
Fpar aula5
Fpar aula5Fpar aula5
Fpar aula5
 
Curso shell
Curso shellCurso shell
Curso shell
 
Introdução ao Shell Script (versão estendida)
Introdução ao Shell Script (versão estendida)Introdução ao Shell Script (versão estendida)
Introdução ao Shell Script (versão estendida)
 
shell bash Fpar aula6
shell bash Fpar aula6shell bash Fpar aula6
shell bash Fpar aula6
 
Shell script i
Shell script iShell script i
Shell script i
 
Shell script
Shell scriptShell script
Shell script
 
Lpi+102
Lpi+102Lpi+102
Lpi+102
 
Shell script
Shell scriptShell script
Shell script
 
Shell Script v0
Shell Script v0Shell Script v0
Shell Script v0
 
Oficina de shell script
Oficina de shell scriptOficina de shell script
Oficina de shell script
 
PHP Day - PHP para iniciantes
PHP Day - PHP para iniciantesPHP Day - PHP para iniciantes
PHP Day - PHP para iniciantes
 
01 apostila-introducao-shell
01   apostila-introducao-shell01   apostila-introducao-shell
01 apostila-introducao-shell
 
Apostila introducao-shell
Apostila introducao-shellApostila introducao-shell
Apostila introducao-shell
 
Linguagem PHP
Linguagem PHPLinguagem PHP
Linguagem PHP
 
Introducao ao Shell Script
Introducao ao Shell ScriptIntroducao ao Shell Script
Introducao ao Shell Script
 
Sapo sessions linux power tools
Sapo sessions linux power toolsSapo sessions linux power tools
Sapo sessions linux power tools
 
Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passos
 
Php 02 Primeiros Passos
Php 02 Primeiros PassosPhp 02 Primeiros Passos
Php 02 Primeiros Passos
 
Comandos do Linux
Comandos do LinuxComandos do Linux
Comandos do Linux
 

Mais de Frederico Madeira

Introdução a Cloud Computing
Introdução a Cloud ComputingIntrodução a Cloud Computing
Introdução a Cloud ComputingFrederico Madeira
 
SI - Processos, Threads, Virtualização e Migração de Código
SI - Processos, Threads, Virtualização e Migração de CódigoSI - Processos, Threads, Virtualização e Migração de Código
SI - Processos, Threads, Virtualização e Migração de CódigoFrederico Madeira
 
SI - SAD - Sistemas de Arquivos Distribuídos
SI - SAD  - Sistemas de Arquivos DistribuídosSI - SAD  - Sistemas de Arquivos Distribuídos
SI - SAD - Sistemas de Arquivos DistribuídosFrederico Madeira
 
SI - Introdução a Sistemas Distribuidos
SI - Introdução a Sistemas DistribuidosSI - Introdução a Sistemas Distribuidos
SI - Introdução a Sistemas DistribuidosFrederico Madeira
 
Proteja seus dados em casa e na internet
Proteja seus dados em casa e na internetProteja seus dados em casa e na internet
Proteja seus dados em casa e na internetFrederico Madeira
 
Linux e o modelo open source
Linux e o modelo open sourceLinux e o modelo open source
Linux e o modelo open sourceFrederico Madeira
 
Redes VoIP - O Futuro da Telefonia
Redes VoIP - O Futuro da TelefoniaRedes VoIP - O Futuro da Telefonia
Redes VoIP - O Futuro da TelefoniaFrederico Madeira
 
Open Virtualization - Virtualização em Software Livre
Open Virtualization - Virtualização em Software LivreOpen Virtualization - Virtualização em Software Livre
Open Virtualization - Virtualização em Software LivreFrederico Madeira
 
Redes NGN - Next Generation Networks
Redes NGN - Next Generation NetworksRedes NGN - Next Generation Networks
Redes NGN - Next Generation NetworksFrederico Madeira
 
Ferramentas para Detecção de Problemas em Redes
Ferramentas para Detecção de Problemas em RedesFerramentas para Detecção de Problemas em Redes
Ferramentas para Detecção de Problemas em RedesFrederico Madeira
 
Arquiteturas de Gerência de Redes
Arquiteturas de Gerência de RedesArquiteturas de Gerência de Redes
Arquiteturas de Gerência de RedesFrederico Madeira
 
Introdução a Gerência de Redes
Introdução a Gerência de RedesIntrodução a Gerência de Redes
Introdução a Gerência de RedesFrederico Madeira
 
Apresentação da disciplina de Gerência de Redes
Apresentação da disciplina de Gerência de RedesApresentação da disciplina de Gerência de Redes
Apresentação da disciplina de Gerência de RedesFrederico Madeira
 
O Uso de Captchas de Áudio no Combate ao spam em Telefonia IP
O Uso de Captchas de Áudio no Combate ao spam em Telefonia IPO Uso de Captchas de Áudio no Combate ao spam em Telefonia IP
O Uso de Captchas de Áudio no Combate ao spam em Telefonia IPFrederico Madeira
 

Mais de Frederico Madeira (20)

WebServices
WebServicesWebServices
WebServices
 
IoT - Internet of Things
IoT -  Internet of ThingsIoT -  Internet of Things
IoT - Internet of Things
 
Introdução a Cloud Computing
Introdução a Cloud ComputingIntrodução a Cloud Computing
Introdução a Cloud Computing
 
SI - Comunicação
SI - ComunicaçãoSI - Comunicação
SI - Comunicação
 
SI - Processos, Threads, Virtualização e Migração de Código
SI - Processos, Threads, Virtualização e Migração de CódigoSI - Processos, Threads, Virtualização e Migração de Código
SI - Processos, Threads, Virtualização e Migração de Código
 
SI - Arquiteturas
SI - ArquiteturasSI - Arquiteturas
SI - Arquiteturas
 
SI - SAD - Sistemas de Arquivos Distribuídos
SI - SAD  - Sistemas de Arquivos DistribuídosSI - SAD  - Sistemas de Arquivos Distribuídos
SI - SAD - Sistemas de Arquivos Distribuídos
 
SI - Introdução a Sistemas Distribuidos
SI - Introdução a Sistemas DistribuidosSI - Introdução a Sistemas Distribuidos
SI - Introdução a Sistemas Distribuidos
 
Proteja seus dados em casa e na internet
Proteja seus dados em casa e na internetProteja seus dados em casa e na internet
Proteja seus dados em casa e na internet
 
Linux e o modelo open source
Linux e o modelo open sourceLinux e o modelo open source
Linux e o modelo open source
 
Redes VoIP - O Futuro da Telefonia
Redes VoIP - O Futuro da TelefoniaRedes VoIP - O Futuro da Telefonia
Redes VoIP - O Futuro da Telefonia
 
Open Virtualization - Virtualização em Software Livre
Open Virtualization - Virtualização em Software LivreOpen Virtualization - Virtualização em Software Livre
Open Virtualization - Virtualização em Software Livre
 
Redes NGN - Next Generation Networks
Redes NGN - Next Generation NetworksRedes NGN - Next Generation Networks
Redes NGN - Next Generation Networks
 
MRTG - SNMP na Prática
MRTG - SNMP na PráticaMRTG - SNMP na Prática
MRTG - SNMP na Prática
 
Introdução ao SNMP
Introdução ao SNMPIntrodução ao SNMP
Introdução ao SNMP
 
Ferramentas para Detecção de Problemas em Redes
Ferramentas para Detecção de Problemas em RedesFerramentas para Detecção de Problemas em Redes
Ferramentas para Detecção de Problemas em Redes
 
Arquiteturas de Gerência de Redes
Arquiteturas de Gerência de RedesArquiteturas de Gerência de Redes
Arquiteturas de Gerência de Redes
 
Introdução a Gerência de Redes
Introdução a Gerência de RedesIntrodução a Gerência de Redes
Introdução a Gerência de Redes
 
Apresentação da disciplina de Gerência de Redes
Apresentação da disciplina de Gerência de RedesApresentação da disciplina de Gerência de Redes
Apresentação da disciplina de Gerência de Redes
 
O Uso de Captchas de Áudio no Combate ao spam em Telefonia IP
O Uso de Captchas de Áudio no Combate ao spam em Telefonia IPO Uso de Captchas de Áudio no Combate ao spam em Telefonia IP
O Uso de Captchas de Áudio no Combate ao spam em Telefonia IP
 

Shell Script - Controle de fluxo

  • 1. Fundamentos de Programação Aplicada a Redes ­  Shell Script Controle de Fluxo Frederico Madeira LPIC­1, LPIC­2, CCNA fred@madeira.eng.br www.madeira.eng.br
  • 2. Saída e Código de Saída ✔ O comando utilizado para terminar um script é o exit ✔ Ele pode ser utilizado para retornar um valor ✔ Todo comando retorna um status ✔ Se finalizado com sucesso o exit code é 0 ✔ Se finalizado com falha, o exit code é um valor numérico diferente de zero #!/bin/bash echo “Teste exit code” Retornará 0 indicando que o comando foi ok. echo $? lskdf # Comando desconhecido Retornará um valor diferente de 0 indicando echo $? um erro exit 113 # Irá retornar 113 para o shell. Por convenção, os comandos retornam 0 para indicar sucesso ou retornam um valor diferente de zero para indicar um erro ou uma condição de erro
  • 3. Condicionais: TEST e IF 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”
  • 4. Condicionais: TEST e IF Exemplo IF: #!/bin/bash echo -n "Digite seu primeiro nome: " read NOME if [ “$NOME” = “Fred” ] then echo “Seja bem vindo $NOME” else echo “Acesso não Permitido” exit 127 fi exit 0
  • 5. Condicionais: TEST e IF Exemplo TEST: #!/bin/bash echo “Verificação do sistema, devo prosseguir [s/n] ?” read RESPOSTA test “$RESPOSTA” = “n” && exit 2 echo "bla bla bla" exit 0
  • 6. Condicionais: 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)
  • 7. Condicionais: TEST e IF Prática: Script idade.sh Escreva um script que pergunte sua idade, pergunte seu sexo e seu nome de usuário neste sistema. Informar: - É maior de idade ? - Seu sexo é masculino ou feminino ? - Possui um diretório home neste servidor ? PS: Faça duas versões, uma usando if e outra usando test
  • 8. Condicionais: TEST e IF Resposta: Script idade.sh #!/bin/bash echo "------------------------------------------------------" if [ "$SEXO" = "M" ] echo -n "Qual sua idade ? " then read IDADE echo "Sexo Masculino" echo -n "Qual seu sexo [M/F]? " else read SEXO echo "Sexo Feminino" echo -n "Qual é seu nome de usuário ? " fi read USUARIO echo "------------------------------------------------------" if [ -d "/home/$USUARIO" ] echo"" then echo "Você possui o home: /home/$USUARIO" if [ $IDADE -ge 18 ] else then echo "Você nao possui um home neste sistema" echo "Você é MAIOR de idade"; fi else echo "Você é MENOR de idade"; exit 0 fi
  • 9. Condicionais: TEST e IF Resposta: Script idade.sh #!/bin/bash echo "------------------------------------------------------" echo -n "Qual sua idade ? " read IDADE echo -n "Qual seu sexo [M/F]? " read SEXO echo -n "Qual é seu nome de usuário ? " read USUARIO echo "------------------------------------------------------" echo"" test $IDADE -ge 18 && echo "Você é MAIOR de idade" || echo "Você é MENOR de idade" test "$SEXO" = "M" && echo "Sexo Masculino" || echo "Sexo Feminino" test -d "/home/$USUARIO" && echo "Você possui um home: /home/$USUARIO" || echo "Você não possui um home neste sistema" exit 0
  • 10. Condicionais: TEST e IF Prática: Script backup.sh Melhore o script backup.sh desenvolvido anteriormente e informe ao final uma mensagem informando se o backup foi concluído com sucesso e se o arquivo existe realmente no local indicado.
  • 11. Condicionais: TEST e IF Resposta: Script backup.sh #!/bin/bash OUT_DIR=/opt/backup/ HOSTNAME=$(hostname) AGORA=$(date +"%Y%m%d-%H%m") BKP_FILE="sysbkp_$HOSTNAME_$AGORA.tar.gz" DIRS="/etc /home /var/www/var/lib/mysql" if [ -e “$OUT_DIR/$BKP_FILE” ] then echo "Realizando backup do sistema...." echo “arquivo existe” cd $OUT_DIR else tar cvfz $BKP_FILE $DIRS echo “arquivo não existe” fi If [ “$?” != 0 ] then echo “Falha na execução do Backup” else echo “Backup executado com sucesso” fi
  • 12. Condicionais: CASE Permite a comparação de uma variável com muitos valores Sintaxe: case $VALOR in 1) echo “Você escolheu 1” ;; 2) echo “Você escolheu 2” ;; *) echo “Você não escolheu nem 1 e nem 2” ;; esac
  • 13. Condicionais: CASE Exemplo:: #!/bin/bash echo "" echo "Escolha uma das seguintes pessoas" echo "" echo "--------------------------------" echo "1. Frederico Madeira" echo "2. Alberto Viegas" echo "3. Luciano Cabral" echo "" echo -n "Qual deles vocÊ deseja obter iformações: " read ESCOLHA Continua ->
  • 14. Condicionais: CASE Exemplo:: case $ESCOLHA in 1) echo "" echo "Professor das cadeiras de Linux/Shell/SD e VoIP" echo "Email: fred@madeira.eng.br" ;; 2) echo "" echo "Professor das cadeiras de Linux/Shell/SD e Segurança" echo "Email: alviegas@gmail.com" ;; 3) echo "" echo "Professor das cadeiras de Windows/Redes Ethernet" echo "Email: lscabral@gmail.com" ;; *) echo "" echo "Qualquer outra opção cai aqui" ;; esac
  • 15. Condicionais: CASE Script: sysinfo2.sh 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 ENTRE COM A OPÇÃO DESEJADA:
  • 16. Condicionais: CASE Script sysinfo2.sh #!/bin/bash # 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 Continua ->
  • 17. Condicionais: CASE Script sysinfo2.sh # 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
  • 18. LOOPS: for Loop é um bloco de código que se repete para enquanto uma condição for verdadeira. Sintaxe: for arg in [list] do Comando 1 Comando 2 Comando 3 .... done
  • 19. LOOPS: for Exmplo #!/bin/bash # Fazendo um loop dada uma sequência numérica for NUMBER in 1 2 3 4 5 6 7 8 9 10 do echo "O número é: $NUMBER" done
  • 20. LOOPS: for Exmplo #!/bin/bash # Fazendo um loop através de variáveis ARQUIVOS="/ect/passwd /etc/crontab /etc/sysconfig/network /etc/fakefile /opt/sportclube /usr/sbin/shutdown" for LISTA in $ARQUIVOS do echo "O arquivo é: $LISTA" done
  • 21. LOOPS: for Exmplo #!/bin/bash # Fazendo um loop através de variáveis carregadas dinamicamente echo -n "Informe um diretório: " read DIR LISTA=$(ls $DIR) for ARQ in $LISTA do echo "O arquivo é: $ARQ" done
  • 22. LOOPS: for Script: file_exist.sh Faça um script que verifique se a lista de arquivos abaixo existe e informe ao usuário. /ect/passwd /etc/crontab /etc/sysconfig/network /etc/fakefile /opt/sportclube /usr/sbin/shutdown
  • 23. LOOPS: for Script: file_exist.sh #!/bin/bash ARQUIVOS="/ect/passwd /etc/crontab /etc/sysconfig/network /etc/fakefile /opt/sportclube /usr/sbin/shutdown" for LISTA in $ARQUIVOS do if [ -e "$LISTA" ] then echo "$LISTA existe" else echo "$LISTA não existe" fi done
  • 24. LOOPS: for Script: ping_hosts.sh Salve a lista abaixo no arquivo hosts.lst e envie 1 pacote ICMP para cada um, ao final informe se o host está ativo ou não. Ordene os hosts em ordem alfabética antes de começar a executar os pings. Www.madeira.eng.br Www.uol.com.br Www.linux.com Www.fedoraproject.og Www.terra.com.br www.jc.com.br Dica: Faça verificação do exit code de cada comando ping
  • 25. LOOPS: for Script: file_exist.sh #!/bin/bash LISTA=$(sort hosts.lst) for HOST in $LISTA do ping -c 1 $HOST &> /dev/null && echo "Host $HOST está ativo" || echo "HOST $HOST está offline" done
  • 26. LOOPS: for Script: new_ls.sh Escreva um script que solicite ao usuário um diretório, informe para cada objeto encontrado neste diretório: - se ele é um diretório - Se é um arquivo - Se é um link, - Se for arquivo, informe se seu tamanho é maior do que zero. O diretório pode ser informado como parâmetro para o comando ou de forma interativa para o usuário Valide se o diretório informado existe ou não Dicas: $* - Lista dos Argumentos passados $# - Quantidade de argumentos passados $1 - Primeiro Argumento $2 – Segundo Argumento
  • 27. LOOPS: for Script: new_ls.sh #!/bin/bash if [ -z "$1" ] then # entra aqui se não for passado parâmetro echo -n "Insira o diretório desejado: " read DIR else # entra aqui se for passada algum parametro DIR=$1 fi
  • 28. LOOPS: for if [ -d "$DIR" ] then # Se for um diretório váldio, executa LISTA=$(ls $DIR) for ARG in $LISTA do if [ -d "$DIR/$ARG" ] then echo "$ARG - Diretório" else if [ -L "$DIR/$ARG" ] then echo "$ARG - Link" else if [ -e "$DIR/$ARG" ] then echo -n "$ARG - Arquivo - " if [ -f "$DIR/$ARG" ] then echo "Arquivo maior do que zero" else echo "Arquivo zerado" fi fi fi fi done else # Nao é um diretório válido echo "O diretório informado não existe" exit 127 fi
  • 29. Fundamentos de Programação Aplicada a Redes ­  Shell Script Controle de Fluxo Frederico Madeira LPIC­1, LPIC­2, CCNA fred@madeira.eng.br www.madeira.eng.br