shell script

Post on 09-Dec-2014

859 Views

Category:

Technology

7 Downloads

Preview:

Click to see full reader

DESCRIPTION

 

TRANSCRIPT

Shell Script@deniscostadsc

DENIS COSTA

DENIS COSTA

Coding Dojo

Tópicos:

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

O que é shell?

hardware

kernel

SHELL

aplicativos

usuário

Sabores de shell

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

O que é Shell Script?

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

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

...

...horrível para multiplataforma

...inpensável para alto desempenho

...lento para IO pesado

...

Redirecionamento

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

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

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

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

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

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

Caracteres Curinga

Caracteres curinga parecem Regex,mas são DIFERENTES.

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

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

Sintaxe

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

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

var=”Ola”echo $var# echo Ola

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

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

#!/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

#!/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

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

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

elseecho "Ele escapou"

fi

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

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

elseecho "É diferente"

fi

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

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

elseecho "É diferente"

fi

#!/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

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

for number in $(seq 100)do

echo $numberdone

#!/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

#!/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

#!/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

#!/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

#!/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

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

function nome_da_funcao(){comando...

}

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

funcao parametro1 parametro2

#!/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

}

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

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

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

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

function concat(){echo $1$2

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

# /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

#/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

Ajuda

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

Obrigado =)

top related