Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Introdução ao Shell Script (versão estendida)

Introdução ao Shell Script (versão estendida)

O shell é o prompt da linha de comando do Unix e do Linux, que recebe e executa comandos digitados pelo usuário. Na linha de comando, podemos utilizar diversos comandos um após o outro. Se colocarmos diversas linhas de comandos em um arquivo texto, teremos um script em shell ou, um Shell Script. Além de comandos, um Shell Script pode conter todas as estruturas de uma linguagem de programação, como if, for, while, variáveis e funções.

Nesse minicurso veremos como automatizar tarefas usando Shell Script e conheceremos um pouco mais sobre alguns dos comandos mais úteis para serem utilizados tanto nos scripts quanto diretamente pela linha de comando. Além disso, veremos como customizar a inicialização do seu shell, como utilizar variáveis ambiente, criar seus próprios comandos e como criar um autocompletar para seus eles.

Hugo Maia Vieira

November 06, 2014
Tweet

More Decks by Hugo Maia Vieira

Other Decks in Programming

Transcript

  1. Introdução ao Shell Script (versão estendida) Hugo Maia Vieira @hugomaiavieira

    novembro de 2014 Esta obra é licenciada sob uma licença Creative Commons
  2. O que é shell? O que é script? O que

    é Shell Script? scripts em shell == Shell Scritp ==
  3. chmod +x arquivo Localização do interpretador: hashbang¹ (#!) Scripts executáveis

    (Unix) #!/bin/sh #!/usr/bin/env sh ou ¹ http://en.wikipedia.org/wiki/Shebang_(Unix)
  4. $ VARIAVEL='bla bla bla' $ echo $VARIAVEL bla bla bla

    Variáveis + Não pode haver espaços ao redor do igual + O comando unset elimina a variável + É possível armazenar a saída de um comando usando o $(... ): $ DATA=$(date +%x) $ echo $DATA 09-11-2011 + O comando local variáveis locais
  5. $ echo $((5*8)) 40 $ SOMA=$((2+5+1)) $ echo $SOMA 8

    $ RESPOTA=$((SOMA*2)) $ echo $RESPOSTA 16 Expressões aritméticas + A construção utilizada para indicar uma expressão aritmética É $((... )) . Sim, com 2 parênteses!
  6. $ test EXPRESSÃO $ test [[ EXPRESSÃO ]] $ man

    test $ test "a" = "a" && echo "é igual!" é igual $ echo $? 0 $ [[ "a" = "b" ]] && echo "é igual!" $ echo $? 1 O comando test + Para a sintaxe usando colchetes, deve ter um espaço entre a expressão e os colchetes.
  7. if COMANDO then comandos elif COMANDO then comandos else comandos

    fi if + O if testa um comando e não uma condição. Porém, existe o comando test que testa condições. if [[ "a" -gt 25 ]]; then echo "é maior que 25" else echo "é menor que 25" fi + Fique ligado: o if é fechado com o fi, ou seja, if invertido.
  8. for VARIAVEL in LISTA do comandos done for + O

    for percorre uma lista, pegando um elemento a cada iteração. echo 'Seu computador irá explodir em 5 segundos' for numero in cinco quatro três dois um do echo "$numero" sleep 1 done echo "BUUMMMM!!!"
  9. for + Um comando muito útil para usar com o

    for é o seq, que gera uma sequência numérica. for numero in $(seq 5) + Outro comando muito útil para usar com o for é o cat: contador=0 for pais in $(cat dados.txt) do contador=$((contador+1)) echo "$contador: $pais" done
  10. while COMANDO do comandos done while numero=0 while test $numero

    -le 10 do numero=$((numero+1)) echo "Contando: $numero" done + Existem também o until, que têm as mesmas características do while . a única diferença é que ele faz o contrário.
  11. case VARIAVEL in caso1) comando; comando;; caso2) comando; comando;; *)

    comando;; esac case case "$1" in -h | --help) echo "$MENSAGEM_DE_USO" ;; -V | --version) echo "1.0" ;; *) echo "Opção inválida: $1" ;; esac + Fique ligado: o case é fechado com o esac, ou seja, case invertido.
  12. nome_funcao () { comandos } funções pedir_nome () { echo

    -n "Digite seu nome: " read NOME } pedir_nome echo "Olá $NOME!" function nome_funcao { comandos }
  13. cut -d : -f 2 /etc/passwd # $0 = cut

    # $1 = -d # $2 = : # $3 = -f # $4 = 2 # $5 = /etc/passwd # $# = 5 # $* = -d : -f 2 /etc/passwd Opções de linha de comando + Variáveis especiais e parâmetros posicionais $0 Nome do script → $1-$n Parâmetros passados à linha de comando → $# Número de parâmetros passados → $* Lista de parâmetros passados →
  14. alias ss="spring rspec" alias ll="ls -lah" alias ..='cd ..' #

    google chrome for mobile dev alias mobile_chrome="google-chrome \ --allow-file-access-from-files \ --disable-web-security \ --user-data-dir=$HOME/.google-chrome/mobile_dev" Alias (apelidos)
  15. compgen -W 'pedro mario maria joão mariana' mari compgem +

    Lista de possíveis “completadas”
  16. COMP_LINE a linha de comando no momento COMP_WORDS lista de

    argumentos passados para o comando no momento COMP_CWORD o índice do argumento onde o cursor está no momento COMP_WORDBREAKS lista de caracteres separadores de palavras COMPREPLY um array contendo as possíveis “completadas” complete + Disponibiliza e usa suas variáveis para funções de autocompletar
  17. current=${COMP_WORDS[COMP_CWORD]} Exemplo Estamos dizendo ao comando complete que utilize a

    função _nome para modificar a variável COMPREPLY com as possíveis “completadas” para o comando nome _nome() { local current=${COMP_WORDS[COMP_CWORD]} COMPREPLY=( $(compgen -W 'mario maria ana mariana' $current) ) } complete -F _nome nome Se estivermos digitando “nome mari” e apartarmos [TAB][TAB], o valor de current será “mari”
  18. Referências http://www.novatec.com.br/livros/shellscript/ Shell Script Professinal – Aurélio Marinho Jargas http://www.tldp.org/LDP/abs/html/abs-guide.html

    Advanced Bash- Scripting Guide http://en.wikipedia.org/wiki/Shebang_(Unix) Sobre o hashbang http://goo.gl/INt07D Autocompletar no Bash