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

Preview:

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.

Citation preview

Introdução ao Shell Script

(versão estendida)

Hugo Maia Vieira@hugomaiavieira

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

Creative Commons

O que é shell?

O que é script?

O que é Shell Script?

scripts em shell == Shell Scritp ==

O Shell, terminal, prompt, linha de comando

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)

$ 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

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

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

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.

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!!!"

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

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.

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.

nome_funcao () { comandos }

funções

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

pedir_nomeecho "Olá $NOME!"

function nome_funcao { comandos }

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→

Vamos ao primeiro exemplo!

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

listando usuários

.bashrc

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)

$PATH

$PS1

$QQ_COISA

Variáveis de ambiente

Vamos ao segundo exemplo!

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

oh my gems!

autocompletar

compgen e complete

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

compgem

+ Lista de possíveis “completadas”

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

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”

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

Recommended