shell script

53
Shell Script @deniscostadsc

Upload: denis-costa

Post on 09-Dec-2014

859 views

Category:

Technology


7 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Shell script

Shell Script@deniscostadsc

Page 2: Shell script

DENIS COSTA

Page 3: Shell script

DENIS COSTA

Coding Dojo

Page 4: Shell script

Tópicos:

• O que é shell?• Sabores de shell• O que é Shell Script?• Shell Script é...• Redirecionamentos• Caracteres Curinga• Sintaxe• Ajuda

Page 5: Shell script

O que é shell?

Page 6: Shell script

hardware

kernel

SHELL

aplicativos

usuário

Page 7: Shell script

Sabores de shell

Page 8: Shell script

Bourne Shell (sh)Bourne-Again Shell (bash)Almquist Shell (ash)Debian Almquist Shell (dash)Z Shell (zsh)Korn shell (ksh)...

Page 9: Shell script

O que é Shell Script?

Page 10: Shell script

$ rm *~ # linha de comando$ cat myscript.sh # scriptrm *~$ ./myscript.sh

Page 11: Shell script

Shell Script é...

Page 12: Shell script

...rápido para prototipar

...fácil

...ótimo para automatizar tarefas

...ótimo para executar tarefas agendadas

...ótimo para iniciar aplicativos

...ótimo para instalar software

...

Page 13: Shell script

...horrível para multiplataforma

...inpensável para alto desempenho

...lento para IO pesado

...

Page 14: Shell script

Redirecionamento

Page 15: Shell script

$ ## Standard Output$ # Saída padrão para o arquivo$ comando > arquivo$ comando 1> arquivo$$ # Saída padrão para o fim do arquivo$ comando >> arquivo$ comando 1>> arquivo

Page 16: Shell script

$ ## Standard Error$ # Saída de erro para o arquivo$ comando 2> arquivo $$ # Saída de erro para o fim do arquivo$ comando 2>> arquivo

Page 17: Shell script

$ ## Juntando as saídas$ # Saída padrão para arquivo$ # e saída de erro para saída padrão$ comando 1> arquivo 2>&1

Page 18: Shell script

$ ## Separando as saídas$ # Saída padrão para arquivo$ # e saída de erro para outro_arquivo$ comando 1> arquivo 2> outro_arquivo

Page 19: Shell script

$ ## Standard Input$$ comando < arquivo$ comando <<< texto

Page 20: Shell script

$ ## Pipe$ # Redireciona a saída padrão do$ # comando1 para a entrada padrão do$ # comando2 $ comando1 | comando2

Page 21: Shell script

Caracteres Curinga

Page 22: Shell script

Caracteres curinga parecem Regex,mas são DIFERENTES.

Page 23: Shell script

Curinga Padrão

* Zero ou mais caracteres

? Um caractere qualquer

[abc] Um caractere que esteja na lista

[!abc] Um caractere que não esteja na lista

{pdf,jpg} Palavra que esteja na lista

[a-c] Um caractere que esteja no range

[!a-c] Um caractere que não esteja no range

Page 24: Shell script

$ ## Expansão dos curingas$ ls *a.jpg a.pdf b.pdf cd.pdf c.pdf$ ls ?.pdfa.pdf b.pdf c.pdf$ ls [abc].pdfa.pdf b.pdf c.pdf$ ls [!a].pdfb.pdf c.pdf$ ls a.{pdf,jpg}a.jpg a.pdf

Page 25: Shell script

Sintaxe

Page 26: Shell script

#!/bin/bash# Atribuindo valores as variáveisnumero=1text=TextoSemAspasMasSemEspacostext2=”Texto com aspas e com espacos”# Usando valores das variáveisecho $numeroecho $textecho $text2

Page 27: Shell script

#!/bin/bash# Substituição de variáveis

var=”Ola”echo $var# echo Ola

Page 28: Shell script

#!/bin/bash# Substituição de comandos

file `which bash`# file /bin/bash

echo $(echo $(echo $(echo “oi”)))# echo $(echo $(echo "oi"))# echo $(echo "oi")# echo "oi"

Page 29: Shell script

$ # A passagens de parametros dos scripts$ # é feita de maneira posicional$$ ./myscript.sh parametro1 paramentro2

Page 30: Shell script

#!/bin/bash# O recuperação dos valores passados# como parametro é feito através# de variáveis especiais

echo $1 # 1° parametroecho $2 # 2° parametroecho $11 # 1° parametro seguido de 1echo ${11} # 11° parametro

Page 31: Shell script

#!/bin/bash# Ainda existem variáveis para acessar# os parametros de várias formas

echo $* # parametros separados pelo $IFSecho $@ # parametros “p1” “p2”echo $# # numero de parametros

Page 32: Shell script

#!/bin/bash# O if verifica o exit status do comando

if grep "denis" texto.txtthenecho "Achei ele"

elseecho "Ele escapou"

fi

Page 33: Shell script

#!/bin/bash# Para fazer comparações use o builtin# command test...

a=1if test $a == 1thenecho "É igual"

elseecho "É diferente"

fi

Page 34: Shell script

#!/bin/bash# ... ou sua sintaxe com [ ]

a=1if [ $a == 1 ]thenecho "É igual"

elseecho "É diferente"

fi

Page 35: Shell script

#!/bin/bash# O for funciona como um for each, e separa# os elementos usando o conteúdo do $IFS# $IFS é uma variável de ambiente que contém# o(s) separador(es) padrão(ões)

for number in 1 2 3 4 5 6 7 8 9 10do

echo $numberdone

Page 36: Shell script

#!/bin/bash# Se você quisesse iterar sobre uma grande# sequência de números

for number in $(seq 100)do

echo $numberdone

Page 37: Shell script

#!/bin/bash# Nas versões mais novas do Bash é possível# usar uma sintaxe que lembra a do C.

for ((number = 0; number < 10; number++))do

echo $numberdone

Page 38: Shell script

#!/bin/bash# CSV Parser de pobrecomma=','new_line=''old_IFS=$IFSIFS=$new_linefor line in $(cat cars.csv); do

IFS=$commafor item in $line; do

echo -ne "$item\t"doneecho “”

doneIFS=$oldIFS

Page 39: Shell script

#!/bin/bash# O while funciona como o if e executa# enquanto o comando verificado retorna exit# status 0

while ping -c 2 www.google.comdo

echo “Sim, temos internet!!”done

Page 40: Shell script

#!/bin/bash# O until é muito semelhante ao while mas# executa enquanto o exit status é diferente# de 0

until ping -c 2 www.google.comdo

echo "Ainda estamos sem internet 8("done

Page 41: Shell script

#!/bin/bash# O case permite vericar o conteúdo de uma# variável várias vezes

case $SO inlinux)

echo "É Linux";;w*)

echo "Isso não é um bom sinal";;*)

echo "Sistema não reconhecido";;

esac

Page 42: Shell script

#!/bin/bash# A declaração de funções é feito com a# palavra reservda function

function nome_da_funcao(){comando...

}

Page 43: Shell script

#!/bin/bash# A invocação de funções e a# passagens de parâmentros é# feito como os scripts

funcao parametro1 parametro2

Page 44: Shell script

#!/bin/bashfunction map(){

func=$1for item in $2; do

$func $itemdone

}

function reduce(){ func=$1

acumulador=$(cut -d ' ' -f 1 <<< "$2")resto=$(cut -d ' ' -f 2- <<< "$2")for item in $resto; do

acumulador=$($func $acumulador $item)doneecho $acumulador

}

Page 45: Shell script

function quadrado(){echo $(($1 * $1))

}map "quadrado" "1 2 3 4 5 6 7 8 9 10"# 1# 4# 9# 16# 25# 36# 49# 64# 81# 100

Page 46: Shell script

function primeira(){echo $(cut -c 1 <<< "$1")

}map "primeira" "O Rato Roeu A Roupa Do Rei De Roma"# O# R# R# A# R# D# R# D# R

Page 47: Shell script

function soma(){echo $(($1 + $2))

}reduce "soma" "1 2 3 4"# 10

Page 48: Shell script

function concat(){echo $1$2

}reduce "concat" "O Rato Roeu A Roupa Do Rei De Roma"# ORatoRoeuARoupaDoReiDeRoma

Page 49: Shell script

# /bin/bash# URL checker burrofunction get_status_code(){

echo $(curl -sL -w '\n%{http_code}\n' $1 | tail -1)}

for url in $(cat urls.txt); doif [ $(get_status_code "$url") != "200" ]; then

echo "$url" >> urls_down.txtfi

done

Page 50: Shell script

#/bin/bash# URL checker inteligentefunction get_status_code(){

echo $(curl -sL -w '\n%{http_code}\n' $1 | tail -1)}

function request(){ url=$1 if [ $(get_status_code "$url") != "200" ]; then echo "$url" >> urls_down.txt fi}

for url in $(cat urls.txt); do request $url &done

Page 51: Shell script

Ajuda

Page 52: Shell script

● $man bash● http://aurelio.net/shell/● http://tldp.org/LDP/abs/abs-guide.pdf

Page 53: Shell script

Obrigado =)