introdução ao shell script (versão estendida)

24
Introdução ao Shell Script (versão estendida) Hugo Maia Vieira @hugomaiavieira novembro de 2014 Esta obra é licenciada sob uma licença Creative Commons

Upload: hugo-maia-vieira

Post on 09-Jul-2015

165 views

Category:

Software


5 download

DESCRIPTION

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.

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