Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Oficina de shell script

1,424 views

Published on

Shell Script

Published in: Technology
  • Be the first to comment

Oficina de shell script

  1. 1. Oficina de ShellScript Segunda Parte Wildcards Variáveis de Ambiente Comandos em Shell Script Parâmetros para o programa Mais comandos /dev/null Bruno L. Albrecht Felipe A. Chies  PET Computação UFRGS  
  2. 2. Wildcards  Recurso utilizado para especificar um ou mais  arquivos/diretório de uma vez só.  Permite a filtragem do que será listado/copiado/ apagado/etc  É uma feature que deixa a shell “mais  poderosa” que a GUI no trato de arquivos.  Quatro tipos:  *, ?, [ ] e { }   
  3. 3. Wildcards  *: qualquer coisa! (zero ou mais caracteres)  rm *.txt → apaga todos os arquivos que terminem  com .txt  ?: um único caractere qualquer!  rm log?.txt → log1.txt, loga.txt, lob[.txt, etc  rm *?.* → todos os arquivos não ocultos  Obs.: para nos referirmos a um arquivo que um  wildcard no nome, utilizamos wildcard   
  4. 4. Wildcards  [ ] : um dos caracteres listados (ou não)  [abcd] : a ou b ou c ou d  [a­d] : qualquer um no intervalo de a a d  [!abcd] : qualquer um, menos a,b,c,d  [!a­d] : qualquer um, menos os que estão no  intervalo de a a d  Exemplo:  sudo umount /dev/[hs]d[a­d][1­9]  desmonta todos os dispositivos   
  5. 5. Wildcards  { } : cada opção separada por vírgulas é  considerada apenas uma vez  echo t{r,igr,rist}es  tres tigres tristes  echo alun{o,a}{,s}  aluno alunos aluno alunos   
  6. 6. ShellScript: Introdução Shell  Interpretador de comandos; Script  É uma descrição geral de qualquer programa  escrito em linguagem interpretada, ou seja, não  compilada;  Temos script em PHP, Ruby, script em PERL e  também Shell Script;
  7. 7. Objetivos Facilitar as tarefas repetidas do adminstrador:  evita a redigitação de comandos;  podem ser agendados para execução através da  tabela crontab (man cron); Scripts podem fazer tarefas complexas  podemos combinar diversos comandos, com  controladores de fluxo e variáveis; São “rápidos” de serem criados e não precisam  ser compilados;
  8. 8. Hello World Muito simples!!! Muito simples: Crie o arquivo: gedit hello.sh & #!/bin/bash echo "Hello World!!!" Para executá­lo:  chmod +x hello.sh  ./hello.sh
  9. 9. Variáveis O bash reconhece uma variável quando ela  começa com $; Declaração: var=“valor”  valor pode ser número, frase, outras variáveis ou  comando.   Pode ser expressado entre “ ”(aspas duplas),    (apóstrofes) ou ` `(crases);
  10. 10. Variáveis Aspas duplas: valor da variável será  interpretado;  variavel="Meu login é: $USER"  echo $variavel  Meu login é: Bruno Apóstrofes: declaração literal  variavel=Meu login é: $USER  echo $variavel  Meu login é: $USER
  11. 11. Entre crases Crases: vão interpretar os comandos  declarados. Se forem combinados com texto  numa expressão, deve­se usar as aspas  juntamente!!!  variavel=“Meu diretório atual é: `pwd`”  echo $variavel  Meu diretório atual é: /home/bruno  Obs.: É o mesmo que $(comando)  var=$(pwd)
  12. 12. PARÂMETROS  É um array de parâmetros!  De $1 a $9  $0 → nome do programa  $# → quantidade de parâmetros  $* → conjunto de todos os parâmetros  Shift n → utilizado para deslocar n parâmetros   
  13. 13. Variáveis de Ambiente  São variáveis LOCAIS ou GLOBAIS já  definidas pelo sistema operacioal  Podem ser redefinidas  Exemplo:  O nome do usuário é determinado a partir de uma  variável de ambiente: $USER   
  14. 14. Variáveis de Ambiente  Principais variáveis globais:  PATH diretório onde podem ser encontrados os  executáveis  USER nome (login) do usuário  HOME diretório home do usuário  HOST nome do host (máquina)  SHELL shell ativo  PS1 mensagem no terminal  IFS separador de parâmetros (default: ” ”)  A lista completa pode ser obtida através do comando   
  15. 15. Variáveis de Ambiente Para definir uma variável de ambiente GLOBAL:  export VARIAVEL=conteúdo Para definir uma variável de ambiente LOCAL:  VARIAVEL=conteudo Exemplo:   export PATH=$PATH:/meu_dir Obs.: esta forma de definir variáveis é   TEMPORÁRIA, ou seja, apenas enquanto o shell    estiver ativo
  16. 16. Variáveis de Ambiente  Para definir variáveis globais e locais  PERMANENTEMENTE, devemos alterar os  seguintes arquivos:   ~./bashrc → somente para o usuário atual  /etc/bash.bashrc → para todos os usuários  Imprimir o conteúdo de uma variável:  echo $VARIAVEL  Deletar uma variável:   unset VARIÁVEL  
  17. 17. Expressões aritméticas  Para o Shell executar operações aritméticas,  devemos utilizar $((expressão))  echo $((2+2))  var1=$((var2+var1))  Ou então, o comando let:  let var1++  let var2­­   
  18. 18. Expressões aritméticas  x++, ++x, x­­, ­­x: [pós,pré]­[in,de]cremento y  x**y: potenciação (x )  x*y, x/y, x%y: multiplicação, divisão, resto  <, <=, >, >=, ==, !=: comparações  &&, ||: AND e OR lógicos   
  19. 19. Comandos: test  Descrição: testar qualquer coisa!  test $var1 ­lt $var2  Obs.: resultado em $?   
  20. 20. if  O comando if testa o STDERR (variável de  ambiente $?), mas, para ficar semelhante à  sintaxe do C, utilizamos o comando test If test $variavel ­gt 10 If [ $variavel ­gt 10 ] then then echo ”é maior que 10” echo ”é maior que 10” else else echo ”é menor que 10” echo ”é menor que 10” fi fi  Atalho do comando test no if:   [ expressão ] → não do espaço antes e depois da    expressão
  21. 21. case Para não precisarmos concatenar milhares de  ifs, utilizamos o case: if [ $var ­eq 1 ] case $var in then  1) <comandos> ;; <comandos> 2) <comandos> ;; elif [ $var ­eq 2 ] 3) <comandos> ;; then 4) <comandos> ;; <comandos> elif [ $var ­eq 3 ] *) <comandos> then esac <comandos> elif [ $var ­eq 4 ] ● Não há ;; no último grupo ● Para fechar o case, usamos “esac” then ● Podemos usar wildcards nos padrões de  <comandos> else grupos. ex.: [1­4], ?, ??, 3|4, ?0|?5, [1234]  <comandos> etc fi
  22. 22. For for numero in um dois três quatro cinco do       echo "Contando: $numero" done  Um comando muito útil para utilizar o for é o seq,  que gera sequências de números:for num in $(seq 10) for num in $(seq 6 10)do do <...>  <...> done for num in $(seq 0 2 10) done do <...> done
  23. 23. For for par do       echo "Parâmetro: $par" done Neste caso, não colocamos o “in” depois da  variável. Isto serve para a variável (no caso  “par”) receber cada parâmetro passado para o  programa a cada laço do for.
  24. 24. For Podemos ainda usar uma sintaxe parecida com  a do C. for (( ; i<=9 ; )) for ((i=0 ; i<=9 ; i++)) do do let i++;       echo ­n “$i “ echo ­n “$i “ done done Outra forma de for for arq in * 1 ­> arquivo1.txt 2 ­> arquivo2.sh do 3 ­> arquivo3.bla let i++; 4 ­> arquivo4.doc echo “$i ­> $arq” etc... done
  25. 25. Break e Continue  break: pára o laço  continue: ignora o que tem embaixo e volta  para o início do laçofor ((i=0 ; ; i++)) $ ./testefor 0 1 2 3 4 5 6 7 8 9do echo ­n “$i “ for ((i=0 ; ; i++)) if [ i ­lt 9 ] do $ ./testefor2 then echo ­n “$i “ 0 1 2 3 4 5 6 7 8 9 continue if [ i ­eq 9 ] else then break break;done done
  26. 26. While Utilizando um contador com o while: while : doi=0       if test ­f /tmp/lockwhile test i ­le 10       thendo               echo "Aguardando lock..."      i=$((i+1))               sleep 1      echo "Contando: $i"       elsedone               break       fi done Para um loop infinito (saindo com break):
  27. 27. Until  Igual ao while, mas o teste é feito após os  comandos serem executados i=0 $./testeuntil until [ $i ­eq 9 ] 0 1 2 3 4 5 6 7 8 do $ echo ­n “$i ” let i++ done $ ./testeuntil2 until ! who | grep pet pet pts/0 Jan 4 16:47 (143.54.12.140) do pet pts/0 Jan 4 16:48 (143.54.12.140) sleep 60 ... done pet pts/0 Jan 4 17:39 (143.54.12.140) echo ­n “usuário pet foi embora!!” usuário pet foi embora às 17:39h!! echo “às $(date “%H:%Mh”)” $
  28. 28. Interação com o usuário read: recebe uma lista de parâmetros e salva nas  variáveis  Se houver mais parâmetros do que variáveis, a última  recebe o resto echo: imprime uma mensagem no STDOUT $ read var1 var2 var3 Curso de ShellScript $ read var1 var2 $ echo $var1 Curso de ShellScript Curso $ echo $var1 $ echo $var2 Curso de $ echo $var2 $ echo $var3 de ShellScript ShellScript
  29. 29. Leitura de Arquivos Duas formas: Cat arquivo.txt | while read LINHA while read LINHA do do echo $LINHA echo $LINHA done < arquivo.txt done O while termina quando o read encontra um  EOF (leitura mal sucedida)

×