SlideShare une entreprise Scribd logo
1  sur  22
Télécharger pour lire hors ligne
Introdução ao Shell Script


   Aurélio Marinho Jargas

      http://aurelio.net
Introdução ao Shell Script - Aurélio Marinho Jargas


                                                           Índice
Sobre o curso.......................................................................................................................1

Apresentação ........................................................................................................................2
     O que é o shell............................................................................................................2
     Shell script...................................................................................................................3
     Antes de começar        ........................................................................................................3

O primeiro shell script.........................................................................................................4
      Passos para criar um shell script ................................................................................4
                                               .
      Problemas na execução do script...............................................................................5
                                                 .

O primeiro shell script (melhorado)...................................................................................6
                                         .
      Melhorar a saída na tela..............................................................................................6
      Interagir com o usuário................................................................................................6
      Melhorar o código do script.........................................................................................7

Rebobinando a fita...............................................................................................................8
     Variáveis......................................................................................................................8
     Detalhes sobre os comandos......................................................................................8
     O comando test.........................................................................................................10
     Tarefa: script que testa arquivos...............................................................................11

Conceitos mais avançados...............................................................................................12
     Recebimento de opções e parâmetros                     ......................................................................12
     Expressões aritméticas         ..............................................................................................12
     If, for e while..............................................................................................................13

Exercícios...........................................................................................................................15

Mais informações...............................................................................................................18

Respostas dos exercícios.................................................................................................19
     testa-arquivos............................................................................................................19
     relacao.sh..................................................................................................................19
     zerador.sh  ..................................................................................................................19
     substring.sh...............................................................................................................20
     juntatudo.sh...............................................................................................................20
     users.sh.....................................................................................................................20
     shells.sh.....................................................................................................................20
     parametros.sh     ............................................................................................................20




                                                                                                                                          i
Sobre o curso
Nome
       Introdução a Shell Scripts
Instrutor
       Aurélio Marinho Jargas (http://aurelio.net)
Objetivo
       Ensinar aos alunos todos os conceitos necessários para poderem fazer sozinhos
       scripts simples em shell.
Pré-Requisitos
       Noções básicas de informática e operação do sistema pela linha de comando. É
       desejado, porém não obrigatório, noções básicas de programação.
Público Alvo
       Desenvolvedores, administradores de sistemas, programadores e interessados em
       geral.
Duração
       8 horas




                                          1
Apresentação
O que é o shell
O shell é o "prompt" da linha de comando do Unix e Linux, é o servo que recebe os
comandos digitados pelo usuário e os executa.

O shell é aquele que aparece logo após digitar-se a senha do usuário e entrar na tela
preta. Ou na interface gráfica, ao clicar no ícone do Xterm, rxvt, Terminal ou Console.

  localhost login: root
  Password:

  Last login: Fri Apr 16 01:57:28 on tty5
  [root@localhost root]# _


Ali está o shell, esperando ansiosamente por algum comando para ele poder executar.
Essa é a sua função: esperar e executar. Cada comando digitado é lido, verificado,
interpretado e enviado ao sistema operacional para ser de fato executado.

         No Mac OS X, o shell está em Aplicativos > Utilitários > Terminal. No Windows é
         preciso instalá-lo com o Cygwin.
Funcionando como uma ponte, o shell é a ligação entre o usuário e o kernel. O kernel é
quem acessa os equipamentos (hardware) da máquina, como disco rígido, placa de vídeo
e modem. Por exemplo, para o usuário ler um arquivo qualquer, toda esta hierarquia é
seguida:

                  USUÁRIO --> SHELL --> KERNEL --> DISCO RÍGIDO


Para os usuários do Windows, é fácil pensar no shell como um MSDOS melhorado. Ao
invés do C:> aparece um [root@localhost root]#, mas o funcionamento é similar. Basta
digitar um comando, suas opções e apertar a ENTER que ele será executado. O comando
deve estar no PATH, mensagens de aviso são mandadas para a tela e Ctrl+C interrompe o
funcionamento. Isso tudo é igual em ambos.

Mas o shell é muito mais poderoso que seu primo distante. Além dos comandos básicos
para navegar entre diretórios e manipular arquivos, ele também possui todas as estruturas
de uma linguagem de programação, como IF, FOR, WHILE, variáveis e funções. Com isso,
também é possível usar o shell para fazer scripts e automatizar tarefas.

Este será o nosso foco: scripts em shell.




                                             2
Introdução ao Shell Script - Aurélio Marinho Jargas

Shell script
Um script é um arquivo que guarda vários comandos e pode ser executado sempre que
preciso. Os comandos de um script são exatamente os mesmos que se digita no prompt, é
tudo shell.

Por exemplo, se de tempos em tempos você quer saber informações do sistema como
horário, ocupação do disco e os usuários que estão logados, é preciso digitar três
comandos:

  [root@localhost root]# date
  [root@localhost root]# df
  [root@localhost root]# w


É melhor fazer um script chamado "sistema" e colocar estes comandos nele. O conteúdo
do arquivo "sistema" seria o seguinte:

  #!/bin/bash
  date
  df
  w


E para chamar este script, basta agora executar apenas um comando:

  [root@localhost root]# sistema


Isso é um shell script. Um arquivo de texto que contém comandos do sistema e pode ser
executado pelo usuário.


Antes de começar
Se você está acessando o sistema como usuário administrador (root), saia e entre como
um usuário normal. É muito perigoso estudar shell usando o superusuário, você pode
danificar o sistema com um comando errado.

        Se você não tem certeza qual o seu usuário, use o comando "whoami" para
        saber
Como o prompt de usuário normal é diferente para cada um, nos exemplos seguintes será
usado "prompt$" para indicar o prompt da linha de comando.




                                             3
O primeiro shell script
O primeiro shell script a fazer será o "sistema" do exemplo anterior, de simplesmente juntar
três comandos em um mesmo script.


Passos para criar um shell script
1. Escolher um nome para o script

Já temos um nome: sistema.


         Use apenas letras minúsculas e evite acentos, símbolos e espaço em branco

2. Escolher o diretório onde colocar o script

Para que o script possa ser executado de qualquer parte do sistema, mova-o para um
diretório que esteja no seu PATH. Para ver quais são estes diretórios, use o comando:

  echo $PATH


         Se não tiver permissão de mover para um diretório do PATH, deixe-o dentro de
         seu diretório pessoal ($HOME).
3. Criar o arquivo e colocar nele os comandos

Use o nano, VI ou outro editor de textos de sua preferência para colocar todos os
comandos dentro do arquivo.

4. Colocar a chamada do shell na primeira linha

A primeira linha do script deve ser:

  #!/bin/bash


Para que ao ser executado, o sistema saiba que é o shell quem irá interpretar estes
comandos.

5. Tornar o script um arquivo executável

Use o seguinte comando para que seu script seja reconhecido pelo sistema como um
comando executável:

  chmod +x sistema




                                             4
Introdução ao Shell Script - Aurélio Marinho Jargas

Problemas na execução do script


    "Comando não encontrado"


    O shell não encontrou o seu script.

    Verifique se o comando que você está 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
    "echo $PATH" mostra quais são os diretórios conhecidos, mova seu script para
    dentro de um deles, ou chame-o passando o caminho completo.

    Se o script estiver no diretório corrente, chame-o com um "./" na frente, assim:

      prompt$ ./sistema


    Caso contrário, especifique o caminho completo desde o diretório raiz:

      prompt$ /tmp/scripts/sistema



    "Permissão Negada"


    O shell encontrou seu script, mas ele não é executável.

    Use o comando "chmod +x seu-script" para torná-lo um arquivo executável.



    "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 IF ou aspas que foram abertos e não foram
    fechados. A própria mensagem informa o número da linha onde o erro foi
    encontrado.




                                           5
O primeiro shell script (melhorado)
Nesse ponto, você já sabe o básico necessário para fazer um script em shell do zero e
executá-lo. Mas apenas colocar os comandos em um arquivo não torna este script útil.
Vamos fazer algumas melhorias nele para que fique mais compreensível.


Melhorar a saída na tela
Executar os três comandos seguidos 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 legível.

O comando "echo" serve para mostrar mensagens 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ários conectados:"
  w


Para usar o echo, basta colocar o texto entre "aspas". Se nenhum texto for colocado, uma
linha em branco é mostrada.


Interagir com o usuário
Para o script ficar mais completo, vamos colocar uma interação mínima com o usuário,
pedindo uma confirmação antes de executar os comandos.

  #!/bin/bash
  echo "Vou buscar os dados do sistema. Posso continuar? [sn] "
  read RESPOSTA
  test "$RESPOSTA" = "n" && exit
  echo "Data e Horário:"
  date
  echo
  echo "Uso do disco:"
  df
  echo
  echo "Usuários conectados:"
  w


O comando "read" leu o que o usuário digitou e guardou na variável RESPOSTA. Logo em
seguida, o comando "test" verificou se o conteúdo dessa variável era "n". Se afirmativo, o

                                            6
Introdução ao Shell Script - Aurélio Marinho Jargas

comando "exit" foi chamado e o script foi finalizado. Nessa linha há vários detalhes
importantes:

     • O conteúdo da variável é acessado colocando-se um cifrão "$" na frente
     • O comando test é útil para fazer vários tipos de verificações em textos e arquivos
     • O operador lógico "&&", só executa o segundo comando caso o primeiro tenha sido
       OK. O operador inverso é o "||"


Melhorar o código do script
Com o tempo, o script vai crescer, mais comandos vão ser adicionados e quanto maior,
mais difícil encontrar o ponto certo onde fazer a alteração ou corrigir algum erro.

Para poupar horas de estresse, e facilitar as manutenções futuras, é preciso deixar o
código visualmente mais agradável e espaçado, e colocar comentários esclarecedores.

  #!/bin/bash
  # sistema - script que mostra informações sobre o sistema
  # Autor: Fulano da Silva

  # Pede uma confirmação do usuário antes de executar
  echo "Vou buscar os dados do sistema. Posso continuar? [sn] "
  read RESPOSTA

  # Se ele digitou 'n', vamos interromper o script
  test "$RESPOSTA" = "n" && exit

  # O date mostra a data e a hora correntes
  echo "Data e Horário:"
  date
  echo

  # O df mostra as partições e quanto cada uma ocupa no disco
  echo "Uso do disco:"
  df
  echo

  # O w mostra os usuários que estão conectados nesta máquina
  echo "Usuários conectados:"
  w


Basta iniciar a linha com um "#" e escrever o texto do comentário em seguida. Estas linhas
são ignoradas pelo shell durante a execução. O cabeçalho com informações sobre o script
e seu autor também é importante para ter-se uma visão geral do que o script faz, sem
precisar decifrar seu código.


         Também é possível colocar comentários no meio da linha # como este




                                              7
Rebobinando a fita
Agora é hora de fixar alguns dos conceitos vistos no script anterior.


Variáveis
As variáveis são a base de qualquer script. É dentro delas que os dados obtidos durante a
execução do script serão armazenados. Para definir uma variável, basta usar o sinal de
igual "=" e para ver seu valor, usa-se o "echo":

  prompt$   VARIAVEL="um dois tres"
  prompt$   echo $VARIAVEL
  um dois   tres
  prompt$   echo $VARIAVEL $VARIAVEL
  um dois   tres um dois tres
  prompt$



         Não podem haver espaços ao redor do igual "="

Ainda é possível armazenar a saída de um comando dentro de uma variável. Ao invés de
aspas, o comando deve ser colocado entre "$(...)", veja:

  prompt$   HOJE=$(date)
  prompt$   echo "Hoje é: $HOJE"
  Hoje é:   Sáb Abr 24 18:40:00 BRT 2004
  prompt$   unset HOJE
  prompt$   echo $HOJE

  prompt$


E finalmente, o comando "unset" apaga uma variável.

         Para ver quais as variáveis que o shell já define por padrão, use o comando
         "env"

Detalhes sobre os comandos
Diferente de outras linguagens de programação, o shell não usa os parênteses para
separar o comando de seus argumentos, mas sim o espaço em branco. O formato de um
comando é sempre:

  COMANDO    OPÇÕES   PARÂMETROS


O comando "cat" mostra o conteúdo de um arquivo. O comando "cat -n sistema" mostra o
nosso script, com as linhas numeradas. O "-n" é a opção para o comando, que o instrui a
numerar linhas, e "sistema" é o último argumento, o nome do arquivo.


                                              8
Introdução ao Shell Script - Aurélio Marinho Jargas

O "read" é um comando do próprio shell, já o "date"" é um executável do sistema. Dentro
de um script, não faz diferença usar um ou outro, pois o shell sabe como executar ambos.
Assim, toda a gama de comandos disponíveis no Unix/Linux pode ser usada em scripts!

Há vários comandos que foram feitos para serem usados com o shell, são como
ferramentas. Alguns deles:

              Comando             Função                         Opções úteis
                 cat        Mostra arquivo          -n, -s
                 cut        Extrai campo            -d -f, -c
                 date       Mostra data             -d, +'...'
                 find       Encontra arquivos       -name, -iname, -type f, -exec
                grep        Encontra texto          -i, -v, -r, -qs, -w -x
                head        Mostra Início           -n, -c
                printf      Mostra texto            nenhuma
                 rev        Inverte texto           nenhuma
                 sed        Edita texto             -n, s/isso/aquilo/, d
                 seq        Conta Números           -s, -f
                 sort       Ordena texto            -n, -f, -r, -k -t, -o
                 tail       Mostra Final            -n, -c, -f
                  tr        Transforma texto        -d, -s, A-Z a-z
                uniq        Remove duplicatas -i, -d, -u
                 wc         Conta Letras            -c, -w, -l, -L



        Use "man comando" ou "comando --help" para obter mais informações sobre
        cada um deles.


E o melhor, em shell é possível combinar comandos, aplicando-os em seqüência, para
formar um comando completo. Usando o pipe "|" é possível canalizar a saída de um
comando diretamente para a entrada de outro, fazendo uma cadeia de comandos.
Exemplo:

  prompt$ cat /etc/passwd | grep root | cut -c1-10
  root:x:0:0
  operator:x
  prompt$




                                                9
Introdução ao Shell Script - Aurélio Marinho Jargas

O cat mostra o arquivo todo, o grep pega essa saída e extrai apenas as linhas que contêm
a palavra "root" e o cut por sua vez, somente nessas linhas que o grep achou, extrai os 10
primeiros caracteres. Isso funciona como uma estação de tratamento de água, onde ela
entra suja, vai passando por vários filtros que vão tirando as impurezas e sai limpa no final.

E por fim, também é possível redirecionar a saída de um comando para um arquivo ao
invés da tela, usando o operador ">". Para guardar a saída do comando anterior no arquivo
"saida", basta fazer:

  prompt$ cat /etc/passwd | grep root | cut -c1-10 > saida
  prompt$ cat saida
  root:x:0:0
  operator:x
  prompt$



         Cuidado! Shell é tão legal que vicia!

O comando test
O canivete suíço dos comandos do shell é o "test", que consegue fazer vários tipos de
testes em números, textos e arquivos. Ele possui várias opções para indicar que tipo de
teste será feito, algumas delas:

             Testes em variáveis                              Testes em arquivos
  -lt Núm. é menor que (LessThan)              -d É um diretório
  -gt Núm. é maior que (GreaterThan)             -f É um arquivo normal
  -le Núm. é menor igual (LessEqual)           -r O arquivo tem permissão de leitura
 -ge Núm. é maior igual (GreaterEqual)         -s O tamanho do arquivo é maior que zero
 -eq Núm. é igual (EQual)                      -w O arquivo tem permissão de escrita
 -ne Núm. é diferente (NotEqual)               -nt O arquivo é mais recente (NewerThan)
  =   String é igual                           -ot O arquivo é mais antigo (OlderThan)
  != String é diferente                        -ef O arquivo é o mesmo (EqualFile)
  -n String é não nula                         -a E lógico (AND)
  -z String é nula                             -o OU lógico (OR)




                                               10
Introdução ao Shell Script - Aurélio Marinho Jargas

Tarefa: script que testa arquivos
Tente fazer o script "testa-arquivos", 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. Exemplo de uso:

  prompt$ testa-arquivos
  Digite o arquivo: /naoexiste
  O arquivo '/naoexiste' não foi encontrado

  prompt$ testa-arquivos
  Digite o arquivo: /tmp
  /tmp é um diretório

  prompt$ testa-arquivos
  Digite o arquivo: /etc/passwd
  /etc/passwd é um arquivo

  prompt$




                                              11
Conceitos mais avançados
Até agora vimos o básico, o necessário para se fazer um script de funcionalidade mínima.
A seguir, conceitos novos que ampliarão as fronteiras de seus scripts!


Recebimento de opções e parâmetros
Assim como os comandos do sistema que possuem e opções e parâmetros, os scripts
também podem ser preparados para receber dados via linha de comando.

Dentro do script, algumas variáveis especiais são definidas automaticamente, em especial,
"$1" contém o primeiro argumento recebido na linha de comando, "$2" o segundo, e assim
por diante. Veja o script "argumentos":

  #!/bin/sh
  # argumentos - mostra o valor das variáveis especiais

  echo   "O nome deste script é: $0"
  echo   "Recebidos $# argumentos: $*"
  echo   "O primeiro argumento recebido foi: $1"
  echo   "O segundo argumento recebido foi: $2"


Ele serve para demonstrar o conteúdo de algumas variáveis especiais, acompanhe:

  prompt$ ./argumentos um dois três
  O nome deste script é: ./argumentos
  Recebidos 3 argumentos: um dois três
  O primeiro argumento recebido foi: um
  O segundo argumento recebido foi: dois


O acesso é direto, basta referenciar a variável que o valor já estará definido. Assim é
possível criar scripts que tenham opções como --help, --version e outras.


Expressões aritméticas
O shell também sabe fazer contas. A construção usada para indicar uma expressão
aritmética é "$((...))", com dois parênteses.

  prompt$   echo $((2*3))
  6
  prompt$   echo $((2*3-2/2+3))
  8
  prompt$   NUM=44
  prompt$   echo $((NUM*2))
  88
  prompt$   NUM=$((NUM+1))
  prompt$   echo $NUM
  45


                                             12
Introdução ao Shell Script - Aurélio Marinho Jargas

If, for e while
Assim como qualquer outra linguagem de programação, o shell também tem estruturas
para se fazer condicionais e loop. As mais usadas são if, for e while.

  if COMANDO              for VAR in LISTA                 while COMANDO
  then                    do                               do
     comandos                comandos                         comandos
  else                    done                             done
     comandos
  fi


Diferente de outras linguagens, o if testa um comando e não uma condição. Porém como já
conhecemos qual o comando do shell que testa condições, é só usá-lo em conjunto com o
if. Por exemplo, para saber se uma variável é maior ou menor do que 10 e mostrar uma
mensagem na tela informando:

  if test "$VARIAVEL" -gt 10
  then
        echo "é maior que 10"
  else
        echo "é menor que 10"
  fi


Há um atalho para o test , que é o comando [. Ambos são exatamente o mesmo comando,
porém usar o [ deixa o if mais parecido com o formato tradicional de outras linguagens:

  if [ "$VARIAVEL" -gt 10 ]
  then
        echo "é maior que 10"
  else
        echo "é menor que 10"
  fi


        Se usar o [, também é preciso fechá-lo com o ], e sempre devem ter espaços ao
        redor. É recomendado evitar esta sintaxe para diminuir suas chances de erro.
Já o while é um laço que é executado enquanto um comando retorna OK. Novamente o
test é bom de ser usado. Por exemplo, para segurar o processamento do script enquanto
um arquivo de lock não é removido:

  while test -f /tmp/lock
  do
        echo "Script travado..."
        sleep 1
  done




                                             13
Introdução ao Shell Script - Aurélio Marinho Jargas

E por fim, o for percorre uma lista de palavras, pegando uma por vez:

  for numero in um dois três quatro cinco
  do
        echo "Contando: $numero"
  done


Uma ferramenta muito útil para usar com o for é o seq, que gera uma seqüência numérica.
Para fazer o loop andar 10 passos, pode-se fazer:

  for passo in $(seq 10)


O mesmo pode ser feito com o while, usando um contador:

  i=0
  while test $i -le 10
  do
        i=$((i+1))
        echo "Contando: $i"
  done


E temos ainda o loop infinito, com condicional de saída usando o "break¨:

  while :
  do
        if test -f /tmp/lock
        then
                echo "Aguardando liberação do lock..."
                sleep 1
        else
                break
        fi
  done




                                              14
Exercícios
A melhor parte finalmente chegou, agora é a sua vez de se divertir. Seguem alguns
exercícios que podem ser resolvidos usando o que foi aprendido até aqui.

Alguns exigirão pesquisa e necessitarão de algumas ferramentas que foram apenas
citadas, mas não aprendidas. O shelleiro também tem que aprender a se virar sozinho!

Exercício 1 - relacao.sh

      Recebe dois números como parâmetro e mostra a relação entre eles. Exemplo:

        prompt$ ./relacao.sh 3 5
        3 é menor que 5
        prompt$ ./relacao.sh 5 3
        5 é maior que 3
        prompt$ ./relacao.sh 5 5
        5 é igual a 5
        prompt$

Exercício 2 - zerador.sh

      Recebe um número como parâmetro e o diminui até chegar a zero, mostrando na
      tela cada passo, em uma mesma linha. Exemplo:

        prompt$ ./zerador.sh 5
        5 4 3 2 1 0
        prompt$ ./zerador.sh 10
        10 9 8 7 6 5 4 3 2 1 0
        prompt$

Exercício 3 - substring.sh

      Recebe duas palavras como parâmetro e verifica se a primeira palavra está contida
      dentro da segunda. Só mostra mensagem informativa em caso de sucesso, do
      contrário não mostra nada. Exemplo:

        prompt$ ./substring.sh ana banana
        ana está contida em banana
        prompt$ ./substring.sh banana maria
        prompt$ ./substring.sh banana
        prompt$ ./substring.sh
        prompt$




        Pesquise sobre o comando grep




                                           15
Introdução ao Shell Script - Aurélio Marinho Jargas

Exercício 4 - juntatudo.sh

      Mostra na tela "grudados" todos os parâmetros recebidos na linha de comando,
      como uma única palavra. Exemplo:

        prompt$ ./juntatudo.sh a b c d e f verde azul
        abcdefverdeazul
        prompt$




        Pesquise sobre o comando tr


Exercício 5 - users.sh

      Do arquivo /etc/passwd, mostra o usuário e o nome completo de cada usuário do
      sistema (campos 1 e 5) separados por um TAB. Exemplo:

        prompt$   ./users.sh
        ftp       FTP User
        nobody    Nobody
        named     Domain name server
        xfs       X Font Server
        mysql     MySQL server
        aurelio   Aurelio Marinho Jargas
        prompt$




        Pesquise sobre o comando cut


Exercício 6 - shells.sh

      Do arquivo /etc/passwd, mostra todos os shells (último campo) que os usuários
      usam. Não mostrar linhas repetidas. Exemplo:

        prompt$ ./shells.sh
        /bin/bash
        /bin/false
        /bin/sync
        /sbin/halt
        /sbin/shutdown
        prompt$




        Pesquise sobre o comando uniq




                                             16
Introdução ao Shell Script - Aurélio Marinho Jargas

Exercício 7 - parametros.sh

      Mostra na tela todos os parâmetros recebidos na linha de comando, contando-os.
      Exemplo:

        prompt$ ./parametros.sh a b c d e f
        Parâmetro 1: a
        Parâmetro 2: b
        Parâmetro 3: c
        Parâmetro 4: d
        Parâmetro 5: e
        Parâmetro 6: f
        prompt$




        Pesquise sobre o comando shift




                                            17
Mais informações
Livro Programação Shell Linux
       Autoria de Julio Cezar Neves, Editora Brasport, ISBN 85-7452-118-3

Livro BASH - Guia de Consulta Rápida
       Autoria de Joel Saade, Editora Novatec, ISBN 85-7522-006-3

Lista de discussão nacional sobre Shell Script
       http://br.groups.yahoo.com/group/shell-script

Página do instrutor sobre Shell Script, com links para vários outros materiais
      http://aurelio.net/shell




                                             18
Respostas dos exercícios
Resista à tentação de olhar as respostas antes de tentar fazer os exercícios! É na prática
que se consolida os conhecimentos aprendidos, não pule este passo. Seja forte, insista,
não desista!


testa-arquivos
  #!/bin/bash

  echo -n "Digite o arquivo: "
  read ARQUIVO

  test -d "$ARQUIVO" && echo "$ARQUIVO é um diretório"
  test -f "$ARQUIVO" && echo "$ARQUIVO é um arquivo"

  test -f "$ARQUIVO" -o -d "$ARQUIVO" || echo "O arquivo '$ARQUIVO' não foi encontrado"

  echo


relacao.sh
  #!/bin/bash

  if test $1 -eq $2
  then
        echo "$1 é igual a $2"
  elif test $1 -lt $2
  then
        echo "$1 é menor que $2"
  else
        echo "$1 é maior que $2"
  fi


zerador.sh
  #!/bin/bash

  i=$1
  while test $i -ge 0
  do
        echo -n "$i "
        i=$((i-1))
  done
  echo




                                            19
Introdução ao Shell Script - Aurélio Marinho Jargas

substring.sh
 #!/bin/bash

 test $# -ne 2 && exit

 echo $2 | grep -qs $1 && echo "$1 está contida em $2"


juntatudo.sh
 #!/bin/bash

 echo $* | tr -d ' '


users.sh
 #!/bin/bash

 cat /etc/passwd | cut -d : -f 1,5 | tr : 't'


shells.sh
 #!/bin/bash
 cat /etc/passwd | cut -d : -f 7 | sort | uniq



parametros.sh
 #!/bin/bash

 i=0
 while test "$1"
 do
       i=$((i+1))
       echo "Parâmetro $i: $1"
       shift
 done




                                          20

Contenu connexe

Tendances

Quero Arch! (Parte 2)
Quero Arch! (Parte 2)Quero Arch! (Parte 2)
Quero Arch! (Parte 2)Felipe Santos
 
O Que é Shell (bash)
O Que é Shell (bash)O Que é Shell (bash)
O Que é Shell (bash)Sérgio Silva
 
Shell script do zero aula 1 - basico do basico e primeiros comandos
Shell script do zero    aula 1 - basico do basico e primeiros comandosShell script do zero    aula 1 - basico do basico e primeiros comandos
Shell script do zero aula 1 - basico do basico e primeiros comandosIvan Ribeiro
 
Introdução ao Linux - aula 03 e 04
Introdução ao Linux - aula 03 e 04Introdução ao Linux - aula 03 e 04
Introdução ao Linux - aula 03 e 04Renan Aryel
 
Inter Aula1
Inter  Aula1Inter  Aula1
Inter Aula1willians
 
Linux4all#1
Linux4all#1Linux4all#1
Linux4all#1Daniel
 
SegurançA BáSica Do Apache
SegurançA BáSica Do ApacheSegurançA BáSica Do Apache
SegurançA BáSica Do ApacheFelipe Santos
 
Guia com mais de 500 comandos do linux explicados computeiro da depressão
Guia com mais de 500 comandos do linux explicados   computeiro da depressãoGuia com mais de 500 comandos do linux explicados   computeiro da depressão
Guia com mais de 500 comandos do linux explicados computeiro da depressãoJesser Martins Medeiros
 
Introdução à Programação de Computadores com Python
Introdução à Programação de Computadores com PythonIntrodução à Programação de Computadores com Python
Introdução à Programação de Computadores com PythonSidney Roberto
 

Tendances (18)

Quero Arch! (Parte 2)
Quero Arch! (Parte 2)Quero Arch! (Parte 2)
Quero Arch! (Parte 2)
 
Curso shell
Curso shellCurso shell
Curso shell
 
Curso Gratuito de Shell Script
Curso Gratuito de Shell ScriptCurso Gratuito de Shell Script
Curso Gratuito de Shell Script
 
O Que é Shell (bash)
O Que é Shell (bash)O Que é Shell (bash)
O Que é Shell (bash)
 
Shell Script
Shell ScriptShell Script
Shell Script
 
Shell script do zero aula 1 - basico do basico e primeiros comandos
Shell script do zero    aula 1 - basico do basico e primeiros comandosShell script do zero    aula 1 - basico do basico e primeiros comandos
Shell script do zero aula 1 - basico do basico e primeiros comandos
 
Introdução ao Linux - aula 03 e 04
Introdução ao Linux - aula 03 e 04Introdução ao Linux - aula 03 e 04
Introdução ao Linux - aula 03 e 04
 
Inter Aula1
Inter  Aula1Inter  Aula1
Inter Aula1
 
Curso gratuitoshellscript nivel-2
Curso gratuitoshellscript nivel-2Curso gratuitoshellscript nivel-2
Curso gratuitoshellscript nivel-2
 
Tutorial: Instalação do Linaro Ubuntu na Gumstix Overo® Fire COM
Tutorial: Instalação do Linaro Ubuntu na Gumstix Overo® Fire COMTutorial: Instalação do Linaro Ubuntu na Gumstix Overo® Fire COM
Tutorial: Instalação do Linaro Ubuntu na Gumstix Overo® Fire COM
 
Tutorial: Instalação de Ubuntu em uma Gumstix Overo
Tutorial: Instalação de Ubuntu em uma Gumstix OveroTutorial: Instalação de Ubuntu em uma Gumstix Overo
Tutorial: Instalação de Ubuntu em uma Gumstix Overo
 
Customizando Slackware
Customizando SlackwareCustomizando Slackware
Customizando Slackware
 
Linux4all#1
Linux4all#1Linux4all#1
Linux4all#1
 
SegurançA BáSica Do Apache
SegurançA BáSica Do ApacheSegurançA BáSica Do Apache
SegurançA BáSica Do Apache
 
Cygwin
CygwinCygwin
Cygwin
 
Comandos linux
Comandos linux Comandos linux
Comandos linux
 
Guia com mais de 500 comandos do linux explicados computeiro da depressão
Guia com mais de 500 comandos do linux explicados   computeiro da depressãoGuia com mais de 500 comandos do linux explicados   computeiro da depressão
Guia com mais de 500 comandos do linux explicados computeiro da depressão
 
Introdução à Programação de Computadores com Python
Introdução à Programação de Computadores com PythonIntrodução à Programação de Computadores com Python
Introdução à Programação de Computadores com Python
 

En vedette

Introdução à Shell Script - Vinícius Alves Hax
Introdução à Shell Script - Vinícius Alves HaxIntrodução à Shell Script - Vinícius Alves Hax
Introdução à Shell Script - Vinícius Alves HaxTchelinux
 
Introdução a estruturas de dados em python
Introdução a estruturas de dados em pythonIntrodução a estruturas de dados em python
Introdução a estruturas de dados em pythonAlvaro Oliveira
 
Programando para web com python - Introdução a Python
Programando para web com python - Introdução a PythonProgramando para web com python - Introdução a Python
Programando para web com python - Introdução a PythonAlvaro Oliveira
 
Curso Python IFPB - Algoritmos
Curso Python IFPB - AlgoritmosCurso Python IFPB - Algoritmos
Curso Python IFPB - AlgoritmosDiego Lopes
 
Linux - Shell e Comandos Básicos
Linux - Shell e Comandos BásicosLinux - Shell e Comandos Básicos
Linux - Shell e Comandos BásicosFrederico Madeira
 
Python para iniciantes
Python para iniciantesPython para iniciantes
Python para iniciantesrichardsonlima
 
Livro Programação em Shell 8 edição Julio Cézar Nevez
Livro Programação em Shell 8 edição   Julio Cézar NevezLivro Programação em Shell 8 edição   Julio Cézar Nevez
Livro Programação em Shell 8 edição Julio Cézar NevezSoftD Abreu
 
Curso básico de Algoritmos com Python
Curso básico de Algoritmos com PythonCurso básico de Algoritmos com Python
Curso básico de Algoritmos com PythonGiancarlo Silva
 
Técnicas hacker soluções para segurança 1
Técnicas hacker soluções para segurança 1Técnicas hacker soluções para segurança 1
Técnicas hacker soluções para segurança 1ponto hacker
 
Livro curso de_hacker_para_iniciantes_cap_1
Livro curso de_hacker_para_iniciantes_cap_1Livro curso de_hacker_para_iniciantes_cap_1
Livro curso de_hacker_para_iniciantes_cap_1Alax Ricard
 
Livro proibido do curso de hacker completo 285 páginas 71
Livro proibido do curso de hacker completo 285 páginas 71Livro proibido do curso de hacker completo 285 páginas 71
Livro proibido do curso de hacker completo 285 páginas 71Guilherme Dias
 
Oficina Python: Hackeando a Web com Python 3
Oficina Python: Hackeando a Web com Python 3Oficina Python: Hackeando a Web com Python 3
Oficina Python: Hackeando a Web com Python 3Marcel Caraciolo
 

En vedette (16)

Introdução à Shell Script - Vinícius Alves Hax
Introdução à Shell Script - Vinícius Alves HaxIntrodução à Shell Script - Vinícius Alves Hax
Introdução à Shell Script - Vinícius Alves Hax
 
Shell Script
Shell ScriptShell Script
Shell Script
 
Introdução a estruturas de dados em python
Introdução a estruturas de dados em pythonIntrodução a estruturas de dados em python
Introdução a estruturas de dados em python
 
Programando para web com python - Introdução a Python
Programando para web com python - Introdução a PythonProgramando para web com python - Introdução a Python
Programando para web com python - Introdução a Python
 
Curso Python IFPB - Algoritmos
Curso Python IFPB - AlgoritmosCurso Python IFPB - Algoritmos
Curso Python IFPB - Algoritmos
 
Linux shell
Linux shellLinux shell
Linux shell
 
Linux - Shell e Comandos Básicos
Linux - Shell e Comandos BásicosLinux - Shell e Comandos Básicos
Linux - Shell e Comandos Básicos
 
Hackeando o Facebook com Python
Hackeando o Facebook com PythonHackeando o Facebook com Python
Hackeando o Facebook com Python
 
Python para iniciantes
Python para iniciantesPython para iniciantes
Python para iniciantes
 
Livro Programação em Shell 8 edição Julio Cézar Nevez
Livro Programação em Shell 8 edição   Julio Cézar NevezLivro Programação em Shell 8 edição   Julio Cézar Nevez
Livro Programação em Shell 8 edição Julio Cézar Nevez
 
Curso básico de Algoritmos com Python
Curso básico de Algoritmos com PythonCurso básico de Algoritmos com Python
Curso básico de Algoritmos com Python
 
Técnicas hacker soluções para segurança 1
Técnicas hacker soluções para segurança 1Técnicas hacker soluções para segurança 1
Técnicas hacker soluções para segurança 1
 
Livro curso de_hacker_para_iniciantes_cap_1
Livro curso de_hacker_para_iniciantes_cap_1Livro curso de_hacker_para_iniciantes_cap_1
Livro curso de_hacker_para_iniciantes_cap_1
 
Livro proibido do curso de hacker completo 285 páginas 71
Livro proibido do curso de hacker completo 285 páginas 71Livro proibido do curso de hacker completo 285 páginas 71
Livro proibido do curso de hacker completo 285 páginas 71
 
Hackeando o Facebook com Python
Hackeando o Facebook com PythonHackeando o Facebook com Python
Hackeando o Facebook com Python
 
Oficina Python: Hackeando a Web com Python 3
Oficina Python: Hackeando a Web com Python 3Oficina Python: Hackeando a Web com Python 3
Oficina Python: Hackeando a Web com Python 3
 

Similaire à Apostila introducao-shell

01 apostila-introducao-shell
01   apostila-introducao-shell01   apostila-introducao-shell
01 apostila-introducao-shellvinicius caldeira
 
Trabalhando na Linha de comando
Trabalhando na  Linha de comandoTrabalhando na  Linha de comando
Trabalhando na Linha de comandoSoftD Abreu
 
Programação em Shell Script
Programação em Shell ScriptProgramação em Shell Script
Programação em Shell ScriptReinaldo Lima
 
Guia com mais de 500 comandos do linux
Guia com mais de 500 comandos do linuxGuia com mais de 500 comandos do linux
Guia com mais de 500 comandos do linuxKalanzans
 
Guia 500 comandos_linux
Guia 500 comandos_linuxGuia 500 comandos_linux
Guia 500 comandos_linuxDario Nakazima
 
Slide curso metasploit
Slide curso metasploitSlide curso metasploit
Slide curso metasploitRoberto Soares
 
Curso de ShellScript - Lm01 shellscript
Curso de ShellScript - Lm01 shellscriptCurso de ShellScript - Lm01 shellscript
Curso de ShellScript - Lm01 shellscriptPessoal
 
Prog shell
Prog shellProg shell
Prog shellTiago
 
Aula - Comandos Linux - Parte 1
Aula - Comandos Linux - Parte 1Aula - Comandos Linux - Parte 1
Aula - Comandos Linux - Parte 1Leo Amorim
 
Comandos Linux Parte 1
Comandos Linux Parte 1Comandos Linux Parte 1
Comandos Linux Parte 1Leo Amorim
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2PrinceGuru MS
 
Linux4all#2
Linux4all#2Linux4all#2
Linux4all#2Daniel
 
12 aula - shell script-2015
12   aula - shell script-201512   aula - shell script-2015
12 aula - shell script-2015Flávia Santos
 
Apostila Treinamento AvançAdo Em Linux
Apostila Treinamento AvançAdo Em LinuxApostila Treinamento AvançAdo Em Linux
Apostila Treinamento AvançAdo Em Linuxeliezer
 
Apostila Treinamento AvançAdo Em Linux
Apostila Treinamento AvançAdo Em LinuxApostila Treinamento AvançAdo Em Linux
Apostila Treinamento AvançAdo Em Linuxeliezer
 
Apostila Treinamento AvançAdo Em Linux
Apostila Treinamento AvançAdo Em LinuxApostila Treinamento AvançAdo Em Linux
Apostila Treinamento AvançAdo Em Linuxguest7a481e8
 

Similaire à Apostila introducao-shell (20)

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
 
Curso de perl
Curso de perlCurso de perl
Curso de perl
 
Trabalhando na Linha de comando
Trabalhando na  Linha de comandoTrabalhando na  Linha de comando
Trabalhando na Linha de comando
 
Unidade 3.6 Introdução ao Shell
Unidade 3.6 Introdução ao ShellUnidade 3.6 Introdução ao Shell
Unidade 3.6 Introdução ao Shell
 
Programação em Shell Script
Programação em Shell ScriptProgramação em Shell Script
Programação em Shell Script
 
Guia com mais de 500 comandos do linux
Guia com mais de 500 comandos do linuxGuia com mais de 500 comandos do linux
Guia com mais de 500 comandos do linux
 
Comandos Linux
Comandos LinuxComandos Linux
Comandos Linux
 
Guia 500 comandos_linux
Guia 500 comandos_linuxGuia 500 comandos_linux
Guia 500 comandos_linux
 
Slide curso metasploit
Slide curso metasploitSlide curso metasploit
Slide curso metasploit
 
Curso de ShellScript - Lm01 shellscript
Curso de ShellScript - Lm01 shellscriptCurso de ShellScript - Lm01 shellscript
Curso de ShellScript - Lm01 shellscript
 
Prog shell
Prog shellProg shell
Prog shell
 
Aula - Comandos Linux - Parte 1
Aula - Comandos Linux - Parte 1Aula - Comandos Linux - Parte 1
Aula - Comandos Linux - Parte 1
 
Comandos Linux Parte 1
Comandos Linux Parte 1Comandos Linux Parte 1
Comandos Linux Parte 1
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2
 
Linux4all#2
Linux4all#2Linux4all#2
Linux4all#2
 
12 aula - shell script-2015
12   aula - shell script-201512   aula - shell script-2015
12 aula - shell script-2015
 
Apostila Treinamento AvançAdo Em Linux
Apostila Treinamento AvançAdo Em LinuxApostila Treinamento AvançAdo Em Linux
Apostila Treinamento AvançAdo Em Linux
 
Apostila Treinamento AvançAdo Em Linux
Apostila Treinamento AvançAdo Em LinuxApostila Treinamento AvançAdo Em Linux
Apostila Treinamento AvançAdo Em Linux
 
Apostila Treinamento AvançAdo Em Linux
Apostila Treinamento AvançAdo Em LinuxApostila Treinamento AvançAdo Em Linux
Apostila Treinamento AvançAdo Em Linux
 

Plus de Marcio Pereira

Plus de Marcio Pereira (10)

Msdos vol4
Msdos vol4Msdos vol4
Msdos vol4
 
Msdos vol3
Msdos vol3Msdos vol3
Msdos vol3
 
Msdos vol2
Msdos vol2Msdos vol2
Msdos vol2
 
Msdos vol1
Msdos vol1Msdos vol1
Msdos vol1
 
4954 c ou c++
4954 c ou c++4954 c ou c++
4954 c ou c++
 
Apostila programacao c++_v04
Apostila programacao c++_v04Apostila programacao c++_v04
Apostila programacao c++_v04
 
Livro ling prog iii 462.pg
Livro ling prog iii   462.pgLivro ling prog iii   462.pg
Livro ling prog iii 462.pg
 
44087090 tutorial-programacao-batch
44087090 tutorial-programacao-batch44087090 tutorial-programacao-batch
44087090 tutorial-programacao-batch
 
37064834 curso-back-track
37064834 curso-back-track37064834 curso-back-track
37064834 curso-back-track
 
37064834 curso-back-track
37064834 curso-back-track37064834 curso-back-track
37064834 curso-back-track
 

Dernier

PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...azulassessoria9
 
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdfReta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdfWagnerCamposCEA
 
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxSlides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxLuizHenriquedeAlmeid6
 
A QUATRO MÃOS - MARILDA CASTANHA . pdf
A QUATRO MÃOS  -  MARILDA CASTANHA . pdfA QUATRO MÃOS  -  MARILDA CASTANHA . pdf
A QUATRO MÃOS - MARILDA CASTANHA . pdfAna Lemos
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...azulassessoria9
 
Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"Ilda Bicacro
 
Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!Ilda Bicacro
 
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdfPROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdfHELENO FAVACHO
 
Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)ElliotFerreira
 
Construção (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãConstrução (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãIlda Bicacro
 
aula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.pptaula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.pptssuser2b53fe
 
Historia da Arte europeia e não só. .pdf
Historia da Arte europeia e não só. .pdfHistoria da Arte europeia e não só. .pdf
Historia da Arte europeia e não só. .pdfEmanuel Pio
 
2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO
2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO
2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSOLeloIurk1
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...azulassessoria9
 
About Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de HotéisAbout Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de Hotéisines09cachapa
 
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de..."É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...Rosalina Simão Nunes
 
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdfPROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdfHELENO FAVACHO
 
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdfLeloIurk1
 
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia TecnologiaPROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia TecnologiaHELENO FAVACHO
 

Dernier (20)

PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
 
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdfReta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
Reta Final - CNU - Gestão Governamental - Prof. Stefan Fantini.pdf
 
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxSlides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
 
A QUATRO MÃOS - MARILDA CASTANHA . pdf
A QUATRO MÃOS  -  MARILDA CASTANHA . pdfA QUATRO MÃOS  -  MARILDA CASTANHA . pdf
A QUATRO MÃOS - MARILDA CASTANHA . pdf
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
 
Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"Nós Propomos! " Pinhais limpos, mundo saudável"
Nós Propomos! " Pinhais limpos, mundo saudável"
 
Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!
 
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdfPROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
PROJETO DE EXTENSÃO I - SERVIÇOS JURÍDICOS, CARTORÁRIOS E NOTARIAIS.pdf
 
Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)
 
Construção (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãConstrução (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! Sertã
 
aula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.pptaula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.ppt
 
Historia da Arte europeia e não só. .pdf
Historia da Arte europeia e não só. .pdfHistoria da Arte europeia e não só. .pdf
Historia da Arte europeia e não só. .pdf
 
2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO
2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO
2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
 
About Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de HotéisAbout Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de Hotéis
 
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de..."É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
 
Aula sobre o Imperialismo Europeu no século XIX
Aula sobre o Imperialismo Europeu no século XIXAula sobre o Imperialismo Europeu no século XIX
Aula sobre o Imperialismo Europeu no século XIX
 
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdfPROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
 
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
 
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia TecnologiaPROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
 

Apostila introducao-shell

  • 1. Introdução ao Shell Script Aurélio Marinho Jargas http://aurelio.net
  • 2. Introdução ao Shell Script - Aurélio Marinho Jargas Índice Sobre o curso.......................................................................................................................1 Apresentação ........................................................................................................................2 O que é o shell............................................................................................................2 Shell script...................................................................................................................3 Antes de começar ........................................................................................................3 O primeiro shell script.........................................................................................................4 Passos para criar um shell script ................................................................................4 . Problemas na execução do script...............................................................................5 . O primeiro shell script (melhorado)...................................................................................6 . Melhorar a saída na tela..............................................................................................6 Interagir com o usuário................................................................................................6 Melhorar o código do script.........................................................................................7 Rebobinando a fita...............................................................................................................8 Variáveis......................................................................................................................8 Detalhes sobre os comandos......................................................................................8 O comando test.........................................................................................................10 Tarefa: script que testa arquivos...............................................................................11 Conceitos mais avançados...............................................................................................12 Recebimento de opções e parâmetros ......................................................................12 Expressões aritméticas ..............................................................................................12 If, for e while..............................................................................................................13 Exercícios...........................................................................................................................15 Mais informações...............................................................................................................18 Respostas dos exercícios.................................................................................................19 testa-arquivos............................................................................................................19 relacao.sh..................................................................................................................19 zerador.sh ..................................................................................................................19 substring.sh...............................................................................................................20 juntatudo.sh...............................................................................................................20 users.sh.....................................................................................................................20 shells.sh.....................................................................................................................20 parametros.sh ............................................................................................................20 i
  • 3. Sobre o curso Nome Introdução a Shell Scripts Instrutor Aurélio Marinho Jargas (http://aurelio.net) Objetivo Ensinar aos alunos todos os conceitos necessários para poderem fazer sozinhos scripts simples em shell. Pré-Requisitos Noções básicas de informática e operação do sistema pela linha de comando. É desejado, porém não obrigatório, noções básicas de programação. Público Alvo Desenvolvedores, administradores de sistemas, programadores e interessados em geral. Duração 8 horas 1
  • 4. Apresentação O que é o shell O shell é o "prompt" da linha de comando do Unix e Linux, é o servo que recebe os comandos digitados pelo usuário e os executa. O shell é aquele que aparece logo após digitar-se a senha do usuário e entrar na tela preta. Ou na interface gráfica, ao clicar no ícone do Xterm, rxvt, Terminal ou Console. localhost login: root Password: Last login: Fri Apr 16 01:57:28 on tty5 [root@localhost root]# _ Ali está o shell, esperando ansiosamente por algum comando para ele poder executar. Essa é a sua função: esperar e executar. Cada comando digitado é lido, verificado, interpretado e enviado ao sistema operacional para ser de fato executado. No Mac OS X, o shell está em Aplicativos > Utilitários > Terminal. No Windows é preciso instalá-lo com o Cygwin. Funcionando como uma ponte, o shell é a ligação entre o usuário e o kernel. O kernel é quem acessa os equipamentos (hardware) da máquina, como disco rígido, placa de vídeo e modem. Por exemplo, para o usuário ler um arquivo qualquer, toda esta hierarquia é seguida: USUÁRIO --> SHELL --> KERNEL --> DISCO RÍGIDO Para os usuários do Windows, é fácil pensar no shell como um MSDOS melhorado. Ao invés do C:> aparece um [root@localhost root]#, mas o funcionamento é similar. Basta digitar um comando, suas opções e apertar a ENTER que ele será executado. O comando deve estar no PATH, mensagens de aviso são mandadas para a tela e Ctrl+C interrompe o funcionamento. Isso tudo é igual em ambos. Mas o shell é muito mais poderoso que seu primo distante. Além dos comandos básicos para navegar entre diretórios e manipular arquivos, ele também possui todas as estruturas de uma linguagem de programação, como IF, FOR, WHILE, variáveis e funções. Com isso, também é possível usar o shell para fazer scripts e automatizar tarefas. Este será o nosso foco: scripts em shell. 2
  • 5. Introdução ao Shell Script - Aurélio Marinho Jargas Shell script Um script é um arquivo que guarda vários comandos e pode ser executado sempre que preciso. Os comandos de um script são exatamente os mesmos que se digita no prompt, é tudo shell. Por exemplo, se de tempos em tempos você quer saber informações do sistema como horário, ocupação do disco e os usuários que estão logados, é preciso digitar três comandos: [root@localhost root]# date [root@localhost root]# df [root@localhost root]# w É melhor fazer um script chamado "sistema" e colocar estes comandos nele. O conteúdo do arquivo "sistema" seria o seguinte: #!/bin/bash date df w E para chamar este script, basta agora executar apenas um comando: [root@localhost root]# sistema Isso é um shell script. Um arquivo de texto que contém comandos do sistema e pode ser executado pelo usuário. Antes de começar Se você está acessando o sistema como usuário administrador (root), saia e entre como um usuário normal. É muito perigoso estudar shell usando o superusuário, você pode danificar o sistema com um comando errado. Se você não tem certeza qual o seu usuário, use o comando "whoami" para saber Como o prompt de usuário normal é diferente para cada um, nos exemplos seguintes será usado "prompt$" para indicar o prompt da linha de comando. 3
  • 6. O primeiro shell script O primeiro shell script a fazer será o "sistema" do exemplo anterior, de simplesmente juntar três comandos em um mesmo script. Passos para criar um shell script 1. Escolher um nome para o script Já temos um nome: sistema. Use apenas letras minúsculas e evite acentos, símbolos e espaço em branco 2. Escolher o diretório onde colocar o script Para que o script possa ser executado de qualquer parte do sistema, mova-o para um diretório que esteja no seu PATH. Para ver quais são estes diretórios, use o comando: echo $PATH Se não tiver permissão de mover para um diretório do PATH, deixe-o dentro de seu diretório pessoal ($HOME). 3. Criar o arquivo e colocar nele os comandos Use o nano, VI ou outro editor de textos de sua preferência para colocar todos os comandos dentro do arquivo. 4. Colocar a chamada do shell na primeira linha A primeira linha do script deve ser: #!/bin/bash Para que ao ser executado, o sistema saiba que é o shell quem irá interpretar estes comandos. 5. Tornar o script um arquivo executável Use o seguinte comando para que seu script seja reconhecido pelo sistema como um comando executável: chmod +x sistema 4
  • 7. Introdução ao Shell Script - Aurélio Marinho Jargas Problemas na execução do script "Comando não encontrado" O shell não encontrou o seu script. Verifique se o comando que você está 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 "echo $PATH" mostra quais são os diretórios conhecidos, mova seu script para dentro de um deles, ou chame-o passando o caminho completo. Se o script estiver no diretório corrente, chame-o com um "./" na frente, assim: prompt$ ./sistema Caso contrário, especifique o caminho completo desde o diretório raiz: prompt$ /tmp/scripts/sistema "Permissão Negada" O shell encontrou seu script, mas ele não é executável. Use o comando "chmod +x seu-script" para torná-lo um arquivo executável. "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 IF ou aspas que foram abertos e não foram fechados. A própria mensagem informa o número da linha onde o erro foi encontrado. 5
  • 8. O primeiro shell script (melhorado) Nesse ponto, você já sabe o básico necessário para fazer um script em shell do zero e executá-lo. Mas apenas colocar os comandos em um arquivo não torna este script útil. Vamos fazer algumas melhorias nele para que fique mais compreensível. Melhorar a saída na tela Executar os três comandos seguidos 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 legível. O comando "echo" serve para mostrar mensagens 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ários conectados:" w Para usar o echo, basta colocar o texto entre "aspas". Se nenhum texto for colocado, uma linha em branco é mostrada. Interagir com o usuário Para o script ficar mais completo, vamos colocar uma interação mínima com o usuário, pedindo uma confirmação antes de executar os comandos. #!/bin/bash echo "Vou buscar os dados do sistema. Posso continuar? [sn] " read RESPOSTA test "$RESPOSTA" = "n" && exit echo "Data e Horário:" date echo echo "Uso do disco:" df echo echo "Usuários conectados:" w O comando "read" leu o que o usuário digitou e guardou na variável RESPOSTA. Logo em seguida, o comando "test" verificou se o conteúdo dessa variável era "n". Se afirmativo, o 6
  • 9. Introdução ao Shell Script - Aurélio Marinho Jargas comando "exit" foi chamado e o script foi finalizado. Nessa linha há vários detalhes importantes: • O conteúdo da variável é acessado colocando-se um cifrão "$" na frente • O comando test é útil para fazer vários tipos de verificações em textos e arquivos • O operador lógico "&&", só executa o segundo comando caso o primeiro tenha sido OK. O operador inverso é o "||" Melhorar o código do script Com o tempo, o script vai crescer, mais comandos vão ser adicionados e quanto maior, mais difícil encontrar o ponto certo onde fazer a alteração ou corrigir algum erro. Para poupar horas de estresse, e facilitar as manutenções futuras, é preciso deixar o código visualmente mais agradável e espaçado, e colocar comentários esclarecedores. #!/bin/bash # sistema - script que mostra informações sobre o sistema # Autor: Fulano da Silva # Pede uma confirmação do usuário antes de executar echo "Vou buscar os dados do sistema. Posso continuar? [sn] " read RESPOSTA # Se ele digitou 'n', vamos interromper o script test "$RESPOSTA" = "n" && exit # O date mostra a data e a hora correntes echo "Data e Horário:" date echo # O df mostra as partições e quanto cada uma ocupa no disco echo "Uso do disco:" df echo # O w mostra os usuários que estão conectados nesta máquina echo "Usuários conectados:" w Basta iniciar a linha com um "#" e escrever o texto do comentário em seguida. Estas linhas são ignoradas pelo shell durante a execução. O cabeçalho com informações sobre o script e seu autor também é importante para ter-se uma visão geral do que o script faz, sem precisar decifrar seu código. Também é possível colocar comentários no meio da linha # como este 7
  • 10. Rebobinando a fita Agora é hora de fixar alguns dos conceitos vistos no script anterior. Variáveis As variáveis são a base de qualquer script. É dentro delas que os dados obtidos durante a execução do script serão armazenados. Para definir uma variável, basta usar o sinal de igual "=" e para ver seu valor, usa-se o "echo": prompt$ VARIAVEL="um dois tres" prompt$ echo $VARIAVEL um dois tres prompt$ echo $VARIAVEL $VARIAVEL um dois tres um dois tres prompt$ Não podem haver espaços ao redor do igual "=" Ainda é possível armazenar a saída de um comando dentro de uma variável. Ao invés de aspas, o comando deve ser colocado entre "$(...)", veja: prompt$ HOJE=$(date) prompt$ echo "Hoje é: $HOJE" Hoje é: Sáb Abr 24 18:40:00 BRT 2004 prompt$ unset HOJE prompt$ echo $HOJE prompt$ E finalmente, o comando "unset" apaga uma variável. Para ver quais as variáveis que o shell já define por padrão, use o comando "env" Detalhes sobre os comandos Diferente de outras linguagens de programação, o shell não usa os parênteses para separar o comando de seus argumentos, mas sim o espaço em branco. O formato de um comando é sempre: COMANDO OPÇÕES PARÂMETROS O comando "cat" mostra o conteúdo de um arquivo. O comando "cat -n sistema" mostra o nosso script, com as linhas numeradas. O "-n" é a opção para o comando, que o instrui a numerar linhas, e "sistema" é o último argumento, o nome do arquivo. 8
  • 11. Introdução ao Shell Script - Aurélio Marinho Jargas O "read" é um comando do próprio shell, já o "date"" é um executável do sistema. Dentro de um script, não faz diferença usar um ou outro, pois o shell sabe como executar ambos. Assim, toda a gama de comandos disponíveis no Unix/Linux pode ser usada em scripts! Há vários comandos que foram feitos para serem usados com o shell, são como ferramentas. Alguns deles: Comando Função Opções úteis cat Mostra arquivo -n, -s cut Extrai campo -d -f, -c date Mostra data -d, +'...' find Encontra arquivos -name, -iname, -type f, -exec grep Encontra texto -i, -v, -r, -qs, -w -x head Mostra Início -n, -c printf Mostra texto nenhuma rev Inverte texto nenhuma sed Edita texto -n, s/isso/aquilo/, d seq Conta Números -s, -f sort Ordena texto -n, -f, -r, -k -t, -o tail Mostra Final -n, -c, -f tr Transforma texto -d, -s, A-Z a-z uniq Remove duplicatas -i, -d, -u wc Conta Letras -c, -w, -l, -L Use "man comando" ou "comando --help" para obter mais informações sobre cada um deles. E o melhor, em shell é possível combinar comandos, aplicando-os em seqüência, para formar um comando completo. Usando o pipe "|" é possível canalizar a saída de um comando diretamente para a entrada de outro, fazendo uma cadeia de comandos. Exemplo: prompt$ cat /etc/passwd | grep root | cut -c1-10 root:x:0:0 operator:x prompt$ 9
  • 12. Introdução ao Shell Script - Aurélio Marinho Jargas O cat mostra o arquivo todo, o grep pega essa saída e extrai apenas as linhas que contêm a palavra "root" e o cut por sua vez, somente nessas linhas que o grep achou, extrai os 10 primeiros caracteres. Isso funciona como uma estação de tratamento de água, onde ela entra suja, vai passando por vários filtros que vão tirando as impurezas e sai limpa no final. E por fim, também é possível redirecionar a saída de um comando para um arquivo ao invés da tela, usando o operador ">". Para guardar a saída do comando anterior no arquivo "saida", basta fazer: prompt$ cat /etc/passwd | grep root | cut -c1-10 > saida prompt$ cat saida root:x:0:0 operator:x prompt$ Cuidado! Shell é tão legal que vicia! O comando test O canivete suíço dos comandos do shell é o "test", que consegue fazer vários tipos de testes em números, textos e arquivos. Ele possui várias opções para indicar que tipo de teste será feito, algumas delas: Testes em variáveis Testes em arquivos -lt Núm. é menor que (LessThan) -d É um diretório -gt Núm. é maior que (GreaterThan) -f É um arquivo normal -le Núm. é menor igual (LessEqual) -r O arquivo tem permissão de leitura -ge Núm. é maior igual (GreaterEqual) -s O tamanho do arquivo é maior que zero -eq Núm. é igual (EQual) -w O arquivo tem permissão de escrita -ne Núm. é diferente (NotEqual) -nt O arquivo é mais recente (NewerThan) = String é igual -ot O arquivo é mais antigo (OlderThan) != String é diferente -ef O arquivo é o mesmo (EqualFile) -n String é não nula -a E lógico (AND) -z String é nula -o OU lógico (OR) 10
  • 13. Introdução ao Shell Script - Aurélio Marinho Jargas Tarefa: script que testa arquivos Tente fazer o script "testa-arquivos", 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. Exemplo de uso: prompt$ testa-arquivos Digite o arquivo: /naoexiste O arquivo '/naoexiste' não foi encontrado prompt$ testa-arquivos Digite o arquivo: /tmp /tmp é um diretório prompt$ testa-arquivos Digite o arquivo: /etc/passwd /etc/passwd é um arquivo prompt$ 11
  • 14. Conceitos mais avançados Até agora vimos o básico, o necessário para se fazer um script de funcionalidade mínima. A seguir, conceitos novos que ampliarão as fronteiras de seus scripts! Recebimento de opções e parâmetros Assim como os comandos do sistema que possuem e opções e parâmetros, os scripts também podem ser preparados para receber dados via linha de comando. Dentro do script, algumas variáveis especiais são definidas automaticamente, em especial, "$1" contém o primeiro argumento recebido na linha de comando, "$2" o segundo, e assim por diante. Veja o script "argumentos": #!/bin/sh # argumentos - mostra o valor das variáveis especiais echo "O nome deste script é: $0" echo "Recebidos $# argumentos: $*" echo "O primeiro argumento recebido foi: $1" echo "O segundo argumento recebido foi: $2" Ele serve para demonstrar o conteúdo de algumas variáveis especiais, acompanhe: prompt$ ./argumentos um dois três O nome deste script é: ./argumentos Recebidos 3 argumentos: um dois três O primeiro argumento recebido foi: um O segundo argumento recebido foi: dois O acesso é direto, basta referenciar a variável que o valor já estará definido. Assim é possível criar scripts que tenham opções como --help, --version e outras. Expressões aritméticas O shell também sabe fazer contas. A construção usada para indicar uma expressão aritmética é "$((...))", com dois parênteses. prompt$ echo $((2*3)) 6 prompt$ echo $((2*3-2/2+3)) 8 prompt$ NUM=44 prompt$ echo $((NUM*2)) 88 prompt$ NUM=$((NUM+1)) prompt$ echo $NUM 45 12
  • 15. Introdução ao Shell Script - Aurélio Marinho Jargas If, for e while Assim como qualquer outra linguagem de programação, o shell também tem estruturas para se fazer condicionais e loop. As mais usadas são if, for e while. if COMANDO for VAR in LISTA while COMANDO then do do comandos comandos comandos else done done comandos fi Diferente de outras linguagens, o if testa um comando e não uma condição. Porém como já conhecemos qual o comando do shell que testa condições, é só usá-lo em conjunto com o if. Por exemplo, para saber se uma variável é maior ou menor do que 10 e mostrar uma mensagem na tela informando: if test "$VARIAVEL" -gt 10 then echo "é maior que 10" else echo "é menor que 10" fi Há um atalho para o test , que é o comando [. Ambos são exatamente o mesmo comando, porém usar o [ deixa o if mais parecido com o formato tradicional de outras linguagens: if [ "$VARIAVEL" -gt 10 ] then echo "é maior que 10" else echo "é menor que 10" fi Se usar o [, também é preciso fechá-lo com o ], e sempre devem ter espaços ao redor. É recomendado evitar esta sintaxe para diminuir suas chances de erro. Já o while é um laço que é executado enquanto um comando retorna OK. Novamente o test é bom de ser usado. Por exemplo, para segurar o processamento do script enquanto um arquivo de lock não é removido: while test -f /tmp/lock do echo "Script travado..." sleep 1 done 13
  • 16. Introdução ao Shell Script - Aurélio Marinho Jargas E por fim, o for percorre uma lista de palavras, pegando uma por vez: for numero in um dois três quatro cinco do echo "Contando: $numero" done Uma ferramenta muito útil para usar com o for é o seq, que gera uma seqüência numérica. Para fazer o loop andar 10 passos, pode-se fazer: for passo in $(seq 10) O mesmo pode ser feito com o while, usando um contador: i=0 while test $i -le 10 do i=$((i+1)) echo "Contando: $i" done E temos ainda o loop infinito, com condicional de saída usando o "break¨: while : do if test -f /tmp/lock then echo "Aguardando liberação do lock..." sleep 1 else break fi done 14
  • 17. Exercícios A melhor parte finalmente chegou, agora é a sua vez de se divertir. Seguem alguns exercícios que podem ser resolvidos usando o que foi aprendido até aqui. Alguns exigirão pesquisa e necessitarão de algumas ferramentas que foram apenas citadas, mas não aprendidas. O shelleiro também tem que aprender a se virar sozinho! Exercício 1 - relacao.sh Recebe dois números como parâmetro e mostra a relação entre eles. Exemplo: prompt$ ./relacao.sh 3 5 3 é menor que 5 prompt$ ./relacao.sh 5 3 5 é maior que 3 prompt$ ./relacao.sh 5 5 5 é igual a 5 prompt$ Exercício 2 - zerador.sh Recebe um número como parâmetro e o diminui até chegar a zero, mostrando na tela cada passo, em uma mesma linha. Exemplo: prompt$ ./zerador.sh 5 5 4 3 2 1 0 prompt$ ./zerador.sh 10 10 9 8 7 6 5 4 3 2 1 0 prompt$ Exercício 3 - substring.sh Recebe duas palavras como parâmetro e verifica se a primeira palavra está contida dentro da segunda. Só mostra mensagem informativa em caso de sucesso, do contrário não mostra nada. Exemplo: prompt$ ./substring.sh ana banana ana está contida em banana prompt$ ./substring.sh banana maria prompt$ ./substring.sh banana prompt$ ./substring.sh prompt$ Pesquise sobre o comando grep 15
  • 18. Introdução ao Shell Script - Aurélio Marinho Jargas Exercício 4 - juntatudo.sh Mostra na tela "grudados" todos os parâmetros recebidos na linha de comando, como uma única palavra. Exemplo: prompt$ ./juntatudo.sh a b c d e f verde azul abcdefverdeazul prompt$ Pesquise sobre o comando tr Exercício 5 - users.sh Do arquivo /etc/passwd, mostra o usuário e o nome completo de cada usuário do sistema (campos 1 e 5) separados por um TAB. Exemplo: prompt$ ./users.sh ftp FTP User nobody Nobody named Domain name server xfs X Font Server mysql MySQL server aurelio Aurelio Marinho Jargas prompt$ Pesquise sobre o comando cut Exercício 6 - shells.sh Do arquivo /etc/passwd, mostra todos os shells (último campo) que os usuários usam. Não mostrar linhas repetidas. Exemplo: prompt$ ./shells.sh /bin/bash /bin/false /bin/sync /sbin/halt /sbin/shutdown prompt$ Pesquise sobre o comando uniq 16
  • 19. Introdução ao Shell Script - Aurélio Marinho Jargas Exercício 7 - parametros.sh Mostra na tela todos os parâmetros recebidos na linha de comando, contando-os. Exemplo: prompt$ ./parametros.sh a b c d e f Parâmetro 1: a Parâmetro 2: b Parâmetro 3: c Parâmetro 4: d Parâmetro 5: e Parâmetro 6: f prompt$ Pesquise sobre o comando shift 17
  • 20. Mais informações Livro Programação Shell Linux Autoria de Julio Cezar Neves, Editora Brasport, ISBN 85-7452-118-3 Livro BASH - Guia de Consulta Rápida Autoria de Joel Saade, Editora Novatec, ISBN 85-7522-006-3 Lista de discussão nacional sobre Shell Script http://br.groups.yahoo.com/group/shell-script Página do instrutor sobre Shell Script, com links para vários outros materiais http://aurelio.net/shell 18
  • 21. Respostas dos exercícios Resista à tentação de olhar as respostas antes de tentar fazer os exercícios! É na prática que se consolida os conhecimentos aprendidos, não pule este passo. Seja forte, insista, não desista! testa-arquivos #!/bin/bash echo -n "Digite o arquivo: " read ARQUIVO test -d "$ARQUIVO" && echo "$ARQUIVO é um diretório" test -f "$ARQUIVO" && echo "$ARQUIVO é um arquivo" test -f "$ARQUIVO" -o -d "$ARQUIVO" || echo "O arquivo '$ARQUIVO' não foi encontrado" echo relacao.sh #!/bin/bash if test $1 -eq $2 then echo "$1 é igual a $2" elif test $1 -lt $2 then echo "$1 é menor que $2" else echo "$1 é maior que $2" fi zerador.sh #!/bin/bash i=$1 while test $i -ge 0 do echo -n "$i " i=$((i-1)) done echo 19
  • 22. Introdução ao Shell Script - Aurélio Marinho Jargas substring.sh #!/bin/bash test $# -ne 2 && exit echo $2 | grep -qs $1 && echo "$1 está contida em $2" juntatudo.sh #!/bin/bash echo $* | tr -d ' ' users.sh #!/bin/bash cat /etc/passwd | cut -d : -f 1,5 | tr : 't' shells.sh #!/bin/bash cat /etc/passwd | cut -d : -f 7 | sort | uniq parametros.sh #!/bin/bash i=0 while test "$1" do i=$((i+1)) echo "Parâmetro $i: $1" shift done 20