Transcript
Page 1: Introdução ao Shell Script (versão estendida)

Introdução ao Shell Script

(versão estendida)

Hugo Maia Vieira@hugomaiavieira

novembro de 2014Esta obra é licenciada sob uma licença

Creative Commons

Page 2: Introdução ao Shell Script (versão estendida)

O que é shell?

O que é script?

O que é Shell Script?

scripts em shell == Shell Scritp ==

Page 3: Introdução ao Shell Script (versão estendida)

O Shell, terminal, prompt, linha de comando

Page 4: Introdução ao Shell Script (versão estendida)

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)

Page 5: Introdução ao Shell Script (versão estendida)

$ VARIAVEL='bla bla bla'$ echo $VARIAVELbla 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 $DATA09-11-2011

+ O comando local variáveis locais

Page 6: Introdução ao Shell Script (versão estendida)

$ echo $((5*8))40

$ SOMA=$((2+5+1))$ echo $SOMA8

$ RESPOTA=$((SOMA*2))$ echo $RESPOSTA16

Expressões aritméticas

+ A construção utilizada para indicar uma expressão aritmética É $((...)). Sim, com 2 parênteses!

Page 7: Introdução ao Shell Script (versão estendida)

$ 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.

Page 8: Introdução ao Shell Script (versão estendida)

if COMANDOthen comandos elif COMANDOthen comandoselse 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.

Page 9: Introdução ao Shell Script (versão estendida)

for VARIAVEL in LISTAdo 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 umdo echo "$numero" sleep 1done echo "BUUMMMM!!!"

Page 10: Introdução ao Shell Script (versão estendida)

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=0for pais in $(cat dados.txt)do contador=$((contador+1)) echo "$contador: $pais"done

Page 11: Introdução ao Shell Script (versão estendida)

while COMANDOdo comandos done

while

numero=0while test $numero -le 10do 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.

Page 12: Introdução ao Shell Script (versão estendida)

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.

Page 13: Introdução ao Shell Script (versão estendida)

nome_funcao () { comandos }

funções

pedir_nome () { echo -n "Digite seu nome: " read NOME}

pedir_nomeecho "Olá $NOME!"

function nome_funcao { comandos }

Page 14: Introdução ao Shell Script (versão estendida)

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→

Page 15: Introdução ao Shell Script (versão estendida)

Vamos ao primeiro exemplo!

https://github.com/hugomaiavieira/shellscript-scti2014

listando usuários

Page 16: Introdução ao Shell Script (versão estendida)

.bashrc

Page 17: Introdução ao Shell Script (versão estendida)

alias ss="spring rspec"

alias ll="ls -lah"

alias ..='cd ..'

# google chrome for mobile devalias mobile_chrome="google-chrome \ --allow-file-access-from-files \ --disable-web-security \ --user-data-dir=$HOME/.google-chrome/mobile_dev"

Alias (apelidos)

Page 18: Introdução ao Shell Script (versão estendida)

$PATH

$PS1

$QQ_COISA

Variáveis de ambiente

Page 19: Introdução ao Shell Script (versão estendida)

Vamos ao segundo exemplo!

https://github.com/hugomaiavieira/shellscript-scti2014

oh my gems!

Page 20: Introdução ao Shell Script (versão estendida)

autocompletar

compgen e complete

Page 21: Introdução ao Shell Script (versão estendida)

compgen -W 'pedro mario maria joão mariana' mari

compgem

+ Lista de possíveis “completadas”

Page 22: Introdução ao Shell Script (versão estendida)

COMP_LINEa linha de comando no momento

COMP_WORDSlista de argumentos passados para o comando no momento

COMP_CWORDo índice do argumento onde o cursor está no momento

COMP_WORDBREAKSlista de caracteres separadores de palavras

COMPREPLYum array contendo as possíveis “completadas”

complete+ Disponibiliza e usa suas variáveis para funções de autocompletar

Page 23: Introdução ao Shell Script (versão estendida)

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”

Page 24: Introdução ao Shell Script (versão estendida)

Referênciashttp://www.novatec.com.br/livros/shellscript/

Shell Script Professinal – Aurélio Marinho Jargas

http://www.tldp.org/LDP/abs/html/abs-guide.htmlAdvanced Bash-Scripting Guide

http://en.wikipedia.org/wiki/Shebang_(Unix)Sobre o hashbang

http://goo.gl/INt07DAutocompletar no Bash


Top Related