SlideShare uma empresa Scribd logo
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

PPTX
Medieval Period and Renaissance Period's Music
PPTX
Classical Composers
PDF
Linux Editor VI
PDF
Linux shell
PDF
Linux - Instalação de Programas
PDF
Shell Scipt - Comandos
PDF
Alta Disponibilidade utilizando Pacemaker e DRBD
PDF
SI - Sistemas Distribuídos - Apresentação da disciplina
Medieval Period and Renaissance Period's Music
Classical Composers
Linux Editor VI
Linux shell
Linux - Instalação de Programas
Shell Scipt - Comandos
Alta Disponibilidade utilizando Pacemaker e DRBD
SI - Sistemas Distribuídos - Apresentação da disciplina

Semelhante a Shell Script - Controle de fluxo (20)

PDF
Shell Script Linux
PDF
Lista de exercícios em Bash (resolvida)
PDF
Fpar aula5
PDF
Curso shell
PDF
Introdução ao Shell Script (versão estendida)
PDF
shell bash Fpar aula6
PPTX
Shell script i
PPTX
Shell script
PDF
Lpi+102
PDF
Shell script
PDF
Soa cap2 exercicios resolvidos shell
PDF
Shell Script v0
PDF
Oficina de shell script
PDF
PHP Day - PHP para iniciantes
PDF
Apostila introducao-shell
PDF
01 apostila-introducao-shell
PDF
Linguagem PHP
PDF
Comandos do linux
ODP
Introducao ao Shell Script
PPTX
Trabalho so m4 rui faria
Shell Script Linux
Lista de exercícios em Bash (resolvida)
Fpar aula5
Curso shell
Introdução ao Shell Script (versão estendida)
shell bash Fpar aula6
Shell script i
Shell script
Lpi+102
Shell script
Soa cap2 exercicios resolvidos shell
Shell Script v0
Oficina de shell script
PHP Day - PHP para iniciantes
Apostila introducao-shell
01 apostila-introducao-shell
Linguagem PHP
Comandos do linux
Introducao ao Shell Script
Trabalho so m4 rui faria
Anúncio

Mais de Frederico Madeira (20)

PDF
WebServices
PDF
IoT - Internet of Things
PDF
Introdução a Cloud Computing
PDF
SI - Comunicação
PDF
SI - Processos, Threads, Virtualização e Migração de Código
PDF
SI - Arquiteturas
PDF
SI - SAD - Sistemas de Arquivos Distribuídos
PDF
SI - Introdução a Sistemas Distribuidos
PDF
Proteja seus dados em casa e na internet
PDF
Linux e o modelo open source
PDF
Redes VoIP - O Futuro da Telefonia
PDF
Open Virtualization - Virtualização em Software Livre
PDF
Redes NGN - Next Generation Networks
PDF
MRTG - SNMP na Prática
PDF
Introdução ao SNMP
PDF
Ferramentas para Detecção de Problemas em Redes
PDF
Arquiteturas de Gerência de Redes
PDF
Introdução a Gerência de Redes
PDF
Apresentação da disciplina de Gerência de Redes
PDF
O Uso de Captchas de Áudio no Combate ao spam em Telefonia IP
WebServices
IoT - Internet of Things
Introdução a Cloud Computing
SI - Comunicação
SI - Processos, Threads, Virtualização e Migração de Código
SI - Arquiteturas
SI - SAD - Sistemas de Arquivos Distribuídos
SI - Introdução a Sistemas Distribuidos
Proteja seus dados em casa e na internet
Linux e o modelo open source
Redes VoIP - O Futuro da Telefonia
Open Virtualization - Virtualização em Software Livre
Redes NGN - Next Generation Networks
MRTG - SNMP na Prática
Introdução ao SNMP
Ferramentas para Detecção de Problemas em Redes
Arquiteturas de Gerência de Redes
Introdução a 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
Anúncio

Último (11)

PPTX
Eng. Software - pontos essenciais para o início
PPTX
Proposta de Implementação de uma Rede de Computador Cabeada.pptx
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PDF
eBook - GUIA DE CONSULTA RAPIDA EM ROTEADORES E SWITCHES CISCO - VOL I.pdf
PDF
Manejo integrado de pragas na cultura do algodão
PPTX
Utilizando code blockes por andre backes
PDF
Jira Software projetos completos com scrum
PPT
Conceitos básicos de Redes Neurais Artificiais
PDF
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
PPTX
Tipos de servidor em redes de computador.pptx
PPTX
Viasol Energia Solar -Soluções para geração e economia de energia
Eng. Software - pontos essenciais para o início
Proposta de Implementação de uma Rede de Computador Cabeada.pptx
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
eBook - GUIA DE CONSULTA RAPIDA EM ROTEADORES E SWITCHES CISCO - VOL I.pdf
Manejo integrado de pragas na cultura do algodão
Utilizando code blockes por andre backes
Jira Software projetos completos com scrum
Conceitos básicos de Redes Neurais Artificiais
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
Tipos de servidor em redes de computador.pptx
Viasol Energia Solar -Soluções para geração e economia de energia

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