introdução ao shell script no linux.docx

Upload: birkovi

Post on 06-Jul-2018

215 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/17/2019 Introdução ao Shell Script no Linux.docx

    1/15

    Introdução ao Shell Script no Linux

    Veja neste artigo como criar códigos para automatização de tarefas rotineiras utilizando o

    interpretador de comandos bash em sistemas Unix-lie! Serão dados os conceitos b"sicos e as

    sintaxes e explicaç#es dos principais comandos!

    Podemos utilizar a criação de arquivos de scripts para tornar mais simples as execuções de tarefasrepetitivas no dia a dia. Muito tempo do programador é empregado em ações desse tipo, como abrir osmesmos programas todos os dias; esvaziar a lixeira e diretrios temp para economizar espaço em disco;etc.

    !m script nada mais é do que um algoritmo pro"etado para realizar uma determinada tarefa, utilizandoos comandos espec#ficos do bas$ e os execut%veis do sistema operacional.

    &embre'se de executar os comandos como usu%rio comum e não como root, visto que, como root tudo

    ser% aceito e, dependendo do que voc( fizer, isto pode gerar danos ao sistema operacional. !ma maneiraf%cil de verificar é abrir o terminal e se o s#mbolo antes do cursor é o )*), voc( est% como usu%riocomum, mas se é o )+), voc( est% como root. Para sair do modo root, digite

     exit

    $riação do shell script

    -m primeiro lugar precisaremos de um arquivo para escrever o nosso script. Podemos fazer isso viaterminal ou via modo gr%fico, sendo que, no ltimo caso, basta apenas clicar com o botão direito domouse em um diretrio dese"ado e escol$er /criar novo arquivo de texto/ ou 0criar novo documento1.

    Para criar um arquivo via terminal, basta abrir o mesmo e digitar

    vi exemplo1.sh

    2ambém podemos fazer

     touch exemplo1.sh

    3 comando vi cria e abre um arquivo para leitura4escrita no terminal, enquanto o comando touc$ criaum arquivo, mas não o abre. Posteriormente é poss#vel abri'lo com um editor de sua prefer(ncia.

    $oncedendo permiss#es ao ar%ui&o

    Para editar o arquivo, precisamos dar permissão de escrita a ele.

    Para a primeira alternativa, em que o vi abriu direto o arquivo, precisamos pressionar -56 para edit%'lo,assim, ao se fazer isso, o caractere )) aparece, então digite

     !chmod 777 %

    1

  • 8/17/2019 Introdução ao Shell Script no Linux.docx

    2/15

    Para a segunda alternativa, em que o touc$ não abriu o arquivo criado, basta digitar

     chmod 777 exemplo1.sh

    3 c$mod é utilizado para setar permissões em arquivos e diretrios. 3 valor 777 concede todos osdireitos 8read, 9rite, execute: para o usu%rio, o grupo e os outros. o invés de 777, outro modo de fazerisso é digitando ) faz refer(ncia ao arquivo atual. Pode'se também, ao invés de utiliz%'lo, fornecer o nomedo arquivo.

    'dição e execução do ar%ui&o

     ?este artigo utilizaremos o vi, no terminal, mas voc( pode escol$er qualquer outro editor, gr%fico ounão.

    bra o arquivo com o comando

    vi exemplo1.sh

    6om o vi voc( precisa digitar )i) para coloc%'lo no modo de inserção.

    !m s$ell script começa 8mas não necessariamente: definindo qual o interpretador de comandos que ser%utilizado para interpretar e executar o script. -xistem outros além do bas$, como o s$, o @s$ e o cs$.

    #!/bin/SHELL_ATAL

    (igura )! -xecução do cdigo bas$

    6omo vemos na (igura ), a primeira lin$a de um s$ell script define qual o interpretador de comandosser% utilizado.

     ?ote que utilizamos o pat$ completo de onde se encontra o s$ell, no caso, no diretrio 4bin4.

    ps isso, é $ora de iniciarmos o nosso script. Para este artigo, o exemplo imprimir% na tela algumasinformações sobre o usu%rio e o computador, conforme o cdigo da Listagem )!

    2

  • 8/17/2019 Introdução ao Shell Script no Linux.docx

    3/15

    Listagem )! 6digo do exemploA.s$

     

    #!/bin/bsh  echo "Seu nome de usu$io &"  'homi  echo "(n)o de ho$ tul e tempo *ue o computdo$ est li+do&"  uptime  echo ", sc$ipt est executndo do di$et-$io&"  p'd

    -ste cdigo nos fornece algumas informações sobre o usu%rio, algumas informações da m%quina e sobreo local de armazenamento do nosso script.

    Para salvarmos o arquivo digitamos -56 e depois 09q1 para gravar as alterações e sair.

    Para executar o script, $% dois pontos a considerar

    A. 5e voc( tiver salvo o seu arquivo no diretrio atual, basta execut%'lo digitando no prompt

     ./exemplo1.sh

    B. 5e voc( tiver salvo o seu arquivo em outro diretrio qualquer, voc( precisar% informar o pat$completo até ele. 6onsiderando que ele este"a em 4tmp4scripts

     /tmp/sc$ipts/exemplo1.sh

    • 3 comando ec$o exibe na tela a string entre aspas duplas. 6aso voc( não queira que ela fiqueentre aspas duplas, simplesmente não as forneça no comando ec$o;

    • 3 comando 9$oami exibe o usu%rio logado no sistema;

    • 3 comando uptime exibe a $ora atual, o tempo decorrido desde que o computador foi ligado, onmero de usu%rios logados e uma média do nmero de processos carregados nos ltimos um,cinco e AC minutos;

    3 comando p9d exibe o diretrio no qual o arquivo est% rodando.2oda string que contiver espaços deve estar entre aspas duplas.

    Inserindo coment"rios

    6oment%rios em cdigos são muito importantes. -xplicar o que est% sendo feito e dar informações sobreo funcionamento do cdigo permite ao desenvolvedor economizar tempo para entend('lo.

    Para inserir coment%rios no seu script, basta iniciar a lin$a com o caractere )+), como no cdigo daListagem * e execução na (igura *!

    Listagem *! 5$ell script com coment%rios.

    3

  • 8/17/2019 Introdução ao Shell Script no Linux.docx

    4/15

     #!/bin/bsh

      #Este um coment$io  #Este out$o coment$io  echo "Este sc$ipt contm coment$ios."

    (igura *! 5a#da da execução do cdigo da Listagem *.

    6omo pode ser observado, os coment%rios não são processados, portanto, não aparecem para o usu%rio.

    +eclarando e utilizando &ari"&eis

    !ma vari%vel é um label 8nome: que armazena um valor para ser utilizado posteriormente no cdigo.5eu uso evita repetições de valores por parte do programador e torna o cdigo mais informativo e limpo.

    linguagem do s$ell não é tipada, ou se"a, pode'se armazenar qualquer tipo de valor em uma vari%vel,desde strings a nmeros.

    Para declar%'las basta seguir a sintaxe

    nome_d_v$ivelvlo$

    onde

    • nomeDdaDvariavel sequ(ncia de caracteres que deve começar por qualquer letra maiscula ouminscula ou underscore 8D:;

    • valor qualquer dado que deva ser valorado E vari%vel.

    ,ota 3bserve que não deve $aver espaços entre o sinal de igual e o nome e o valor da vari%vel.

    Para utilizarmos o valor da vari%vel coloca'se o * 8cifrão: na frente de seu nome, como mostra o

    exemplo da Listagem .!

    Listagem .! Feclarando e utilizando vari%veis.

      #!/bin/bsh  site'''.devmedi.com.b$  meu_nume$o_)vo$ito1  _cidde0o$to Ale+$e0  echo 2m -timo site p$ voc3 p$ende$ p$o+$m$ e se mnte$ tuli4do &5site0  echo 26eu nme$o )vo$ito & 5meu_nume$o_)vo$ito0  echo 26inh cidde ntl & 5_cidde0

     

    4

  • 8/17/2019 Introdução ao Shell Script no Linux.docx

    5/15

    gora, se voc( dese"a printar o nome da prpria vari%vel, basta colocar uma barra invertida )G) antes do *,assim, ela nega o caractere seguinte e normalmente é utilizada para caracteres de scape 8ou se"a,caracteres que "% tem uma função espec#fica, mas que voc( dese"a somente utilizar em um nome ouvalor, sem execut%'los:. He"amos um exemplo na Listagem /!

    Listagem /! Printando o nome de uma vari%vel ao invés de seu contedo.

      #!/bin/bsh  nome)e$nnd  echo 2, nome d v$ivel 85nome0

    0tribuindo sa1das de comandos a &ari"&eis

    I poss#vel armazenar o resultado de um comando em uma vari%vel. Jsso é muito til em situações em

    que se usar% este resultado em mais de um lugar ao longo do script.

    K% duas sintaxes para isso

    A. nomeDdaDvariavelL*8comando:

    B. nomeDdaDvariavelLcomando

    Hoc( pode escol$er a que mel$or l$e agrada ou empregar as duas nos seus scripts.

    3 prximo exemplo lista as informações relativas a todos os discos e partições do sistema

      #!/bin/bsh  s9stem_in)o:d) ;h: # Tmbm pode$i se$ s9stem_in)o5

  • 8/17/2019 Introdução ao Shell Script no Linux.docx

    6/15

    $omandos de seleção ou de tomada de decisão

     ?a maioria das vezes precisamos seguir um determinado fluxo de execução baseado em alguma decisãotomada pelo usu%rio ou outro sistema que este"a utilizando o nosso. 3 comando mais simples que

     permite isso é o condicional, que tem a seguinte sintaxe

    i) B C,D(CA, F@then  AGESIi

    3nde

    • 63?FJ63 teste que, se verdadeiro, passar% o controle para o bloco dentro do t$en;

    • O-5 comandos a serem executados se o resultado de 63?FJ63 for verdadeiro.

    ,ota I muito comum o desenvolvedor esquecer de fec$ar o if. &embre'se sempre que, para cada if

    aberto, voc( precisa fec$%'lo com o fi.

    ,ota &embre'se que, se utilizar o )Q), voc( deve fec$%'lo com o )R), e deixando sempre espaços ao redor.Jsso é muito importante, pois eles são um 0atal$o1 para o comando )test). Jsso significa que,alternativamente, voc( poderia querer não utilizar os colc$etes

    i) test C,D(CA,@then  AGESIi

    Mas normalmente se utiliza os colc$etes por ser mais compacto e para ficar mais semel$ante ao formato

    em outras linguagens. Fe qualquer forma, a escol$a é sua.

    ,ota -m outras linguagens de programação o if testa uma condição, mas em s$ell script o if testa asa#da de um comando.

    Hamos a um exemplo em que o usu%rio dever% digitar um nmero e verificaremos se ele est% em umdeterminado intervalo, como mostra a Listagem 3!

    Listagem 3! !tilizando o condicional if...t$en

      #!/bin/bsh  echo 2i+ite um nme$o *ul*ue$&0  $ed nume$o@

    6

  • 8/17/2019 Introdução ao Shell Script no Linux.docx

    7/15

      i) B 25nume$o0 ;+t JK F@  then  echo 2Este nme$o mio$ *ue JK!0  )i

    He"a a seguir os parSmetros mais comuns utilizados com o comando test

    • n stringA o comprimento de stringA é diferente de T;

    • z stringA o comprimento de stringA é zero;stringA 4 stringB stringA e stringB são id(nticas;stringA 54 stringB stringA e stringB são diferentes;inteiroA -e% inteiroB inteiroA possui o mesmo valor que inteiroB;inteiroA -ne inteiroB inteiroA não possui o mesmo valor que inteiroB;inteiroA -gt inteiroB inteiroA é maior que inteiroB;inteiroA -ge inteiroB inteiroA é maior ou igual a inteiroB;

    inteiroA -lt inteiroB inteiroA é menor que inteiroB;inteiroA -le inteiroB inteiroA é menor ou igual a inteiroB;

    • e nomeDdoDarquivo verifica se nomeDdoDarquivo existe;

    • d nomeDdoDarquivo verifica se nomeDdoDarquivo é um diretrio;

    • f nomeDdoDarquivo verifica se nomeDdoDarquivo é um arquivo regular 8texto, imagem, programa, docs, planil$as:.

    6 comando else

    -xiste a possibilidade de também tratar o caso em que o nosso teste fal$a. Para isso temos o comandoelse, cu"a sintaxe é

    i) B C,D(CA, F@  then  AGES_1  else  AGES_J)i

    3nde

    • 63?FJ63 teste que, se verdadeiro, passar% o controle para o bloco dentro do t$en;

    • O-5DA comandos a serem executados se o resultado de 63?FJ63 for verdadeiro;

    • O-5DB comandos a serem executados se o resultado de 63?FJ63 for falso.

    He"amos um exemplo na Listagem 7 que verifica se um nmero digitado pelo usu%rio é positivo ounegativo.

    Listagem 7! !tilizando o condicional if...t$en...else.

    7

  • 8/17/2019 Introdução ao Shell Script no Linux.docx

    8/15

      #!/bin/bsh  echo 2i+ite um nme$o *ul*ue$&0  $ed nume$o@  i) B 25nume$o0 ;+e K F@  then  echo 2, nme$o 5nume$o positivo!0

      else  echo 2, nme$o 5nume$o ne+tivo!0)i

    6 comando elif 

    K% casos em que temos mais de uma condição a ser testada, todas correlacionadas. Para isso temos ocomando elif, cu"a sintaxe é

    i) B C,D(CA,_1 F@ then  AGES_1 eli) B C,D(CA,_J F@ then  AGES_J eli) B C,D(CA,_ F@ then  AGES_  .  .  .  . eli) B C,D(CA,_D F@ then  AGES_DIi

    3nde

    • 63?FJ63DA U 63?FJ63D? teste que, se verdadeiro, passar% o controle para o blocodentro do respectivo t$en;

    • O-5DA U O-5D? comandos a serem executados se os resultados de 63?FJ63DA U63?FJ63D? forem verdadeiros.

    seguir temos um exemplo que apresenta um menu para o usu%rio escol$er uma opção. Vaseado nestaescol$a, a $ora e a data serão exibidas; uma divisão ser% efetuada e seu resultado ser% exibido, e umamensagem ser% exibida com o nome que o usu%rio fornecer, como mostra a Listagem 8!

    Listagem 8! !tilizando o comando elif.

    8

  • 8/17/2019 Introdução ao Shell Script no Linux.docx

    9/15

    #!/bin/bshecho "Selecione um opMo&"echo "1 ; Exibi$ dt e ho$ do sistem"echo "J ; Exibi$ o $esultdo d divisMo 1K/J"echo " ; Exibi$ um mens+em0$ed opco@

    i) B 5opco "1" F@then  dt5

  • 8/17/2019 Introdução ao Shell Script no Linux.docx

    10/15

    • O-5DA U O-5D? ações a serem tomadas caso a vari%vel combine com 653DA U653D?, respectivamente.

    Por exemplo, modificando o exemplo anterior temos o cdigo da Listagem 9!

    Listagem 9! !tilizando o comando case.

      #!/bin/bsh  echo "Selecione um opMo&"  echo "1 ; Exibi$ dt e ho$ do sistem"  echo "J ; Exibi$ o $esultdo d divisMo 1K/J"  echo " ; Exibi$ um mens+em0$ed opco@  cse 5opco in  210=  dt5

  • 8/17/2019 Introdução ao Shell Script no Linux.docx

    11/15

    3bserve que são apenas duas retic(ncias.

    Xuando o loop for começa, a vari%vel é inicializada com o primeiro valor do con"unto, e ocorre a primeira iteração 8entrada no laço e execução dos comandos:. Para as iterações seguintes, os valores docon"unto serão atribu#dos E vari%vel, sucessivamente, até que se alcance o ltimo e o loop termine a

    execução.

    He"a o exemplo da Listagem )  #!/bin/bsh  echo 2Testndo o loop )o$0  )o$ i in 1K..K@  do  echo 25i0  done

    3utra forma de criarmos sequ(ncias de valores é com o comando se%, como mostra a Listagem ))!

    Listagem ))! -xemplo de uso do loop for com o comando seq com intervalo.

      #!/bin/bsh  echo 2Testndo o comndo se*0

      )o$ i in 5

  • 8/17/2019 Introdução ao Shell Script no Linux.docx

    12/15

    'hile B C,D(CA, F@  do  AGES  done

    3nde

    • 63?FJ63 condição cu"a veracidade determina a perman(ncia no laço;

    • O-5 ações a serem tomadas enquanto 63?FJ63 for verdadeira.

    Hamos na Listagem ). um exemplo que exibe ao usu%rio o que ele digitou, enquanto ele não informar'A.

    Listagem ).! -xemplo de uso do loop 9$ile.

      #!/bin/bsh

      echo 2(n)o$me o *ue voc3 *uise$O ;1 p$ si$0  $ed ddo@  'hile B 5ddo ! 2;10 F@  do  echo 2oc3 di+itou 5ddo0  $ed ddo@ done

     

    He"amos um outro exemplo com contador na Listagem )/!

    Listagem )/! -xemplo de uso do loop 9$ile com contador.

      #!/bin/bsh  echo 2(n)o$me t *ue vlo$ positivo e mio$ *ue 4e$o cont$&0  $ed vlo$@  i1  'hile B 5i ;le 5vlo$ F@  do  echo 25i0 

  • 8/17/2019 Introdução ao Shell Script no Linux.docx

    13/15

    3 uso de funções é imprescind#vel para separar, organizar e estruturar a lgica de qualquer algoritmo,se"a em s$ell script ou qualquer outra linguagem de programação. 5ua sintaxe é muito simples

    nome_)unco

  • 8/17/2019 Introdução ao Shell Script no Linux.docx

    14/15

    0rgumentos

     ?ormalmente um programa recebe argumentos como entrada, ou se"a, dados fornecidos pelo usu%rio ou por outro programa, os quais devem ser 0consumidos1 para produzir as sa#das dese"adas.

    -m s$ell script não poderia ser diferente temos nomes especiais para designar os argumentos recebidos por um script

    • *T Z contém o nome do script que foi executado;

    • *A U *n Z cont(m os argumentos na ordem em que foram passados 8A[ argumento em *A, B[argumento em *B, etc.:.

    • *+ ' contém o nmero de argumentos que foi passado 8ou se"a, não considera o nome do scriptem *T:;

    • *\ ' retorna todos os argumentos de uma vez s.

    Hamos ao exemplo da Listagem )3 e sua execução é exibida na (igura .!

    Listagem )3! -xemplo de uso de argumentos em scripts.

      #!/bin/bsh

     i) B 5# ;lt 1 F@

      then  echo "$ecis )o$nece$ pelo menos 1 $+umento!"  exit 1 )i echo "Dme$o de $+umentos pssdos& 5#"iK)o$ $+umento in 5V do i5

  • 8/17/2019 Introdução ao Shell Script no Linux.docx

    15/15

    6onforme vimos no artigo, s$ell scripts são a mel$or maneira de automatizar tarefas di%rias em sistemas!nix'li@e. lém de pr%ticos, nos poupam muito tempo, além de possu#rem uma sintaxe simples e

     permitir processar desde pequenas quantidades de dados até executar tarefas mais robustas.

    15