Shell script
-
Upload
denis-costa -
Category
Technology
-
view
866 -
download
7
description
Transcript of Shell script
![Page 1: Shell script](https://reader033.fdocuments.net/reader033/viewer/2022051109/5485f32ab4af9fb37a8b4668/html5/thumbnails/1.jpg)
Shell Script@deniscostadsc
![Page 2: Shell script](https://reader033.fdocuments.net/reader033/viewer/2022051109/5485f32ab4af9fb37a8b4668/html5/thumbnails/2.jpg)
DENIS COSTA
![Page 3: Shell script](https://reader033.fdocuments.net/reader033/viewer/2022051109/5485f32ab4af9fb37a8b4668/html5/thumbnails/3.jpg)
DENIS COSTA
Coding Dojo
![Page 4: Shell script](https://reader033.fdocuments.net/reader033/viewer/2022051109/5485f32ab4af9fb37a8b4668/html5/thumbnails/4.jpg)
Tópicos:
• O que é shell?• Sabores de shell• O que é Shell Script?• Shell Script é...• Redirecionamentos• Caracteres Curinga• Sintaxe• Ajuda
![Page 5: Shell script](https://reader033.fdocuments.net/reader033/viewer/2022051109/5485f32ab4af9fb37a8b4668/html5/thumbnails/5.jpg)
O que é shell?
![Page 6: Shell script](https://reader033.fdocuments.net/reader033/viewer/2022051109/5485f32ab4af9fb37a8b4668/html5/thumbnails/6.jpg)
hardware
kernel
SHELL
aplicativos
usuário
![Page 7: Shell script](https://reader033.fdocuments.net/reader033/viewer/2022051109/5485f32ab4af9fb37a8b4668/html5/thumbnails/7.jpg)
Sabores de shell
![Page 8: Shell script](https://reader033.fdocuments.net/reader033/viewer/2022051109/5485f32ab4af9fb37a8b4668/html5/thumbnails/8.jpg)
Bourne Shell (sh)Bourne-Again Shell (bash)Almquist Shell (ash)Debian Almquist Shell (dash)Z Shell (zsh)Korn shell (ksh)...
![Page 9: Shell script](https://reader033.fdocuments.net/reader033/viewer/2022051109/5485f32ab4af9fb37a8b4668/html5/thumbnails/9.jpg)
O que é Shell Script?
![Page 10: Shell script](https://reader033.fdocuments.net/reader033/viewer/2022051109/5485f32ab4af9fb37a8b4668/html5/thumbnails/10.jpg)
$ rm *~ # linha de comando$ cat myscript.sh # scriptrm *~$ ./myscript.sh
![Page 11: Shell script](https://reader033.fdocuments.net/reader033/viewer/2022051109/5485f32ab4af9fb37a8b4668/html5/thumbnails/11.jpg)
Shell Script é...
![Page 12: Shell script](https://reader033.fdocuments.net/reader033/viewer/2022051109/5485f32ab4af9fb37a8b4668/html5/thumbnails/12.jpg)
...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](https://reader033.fdocuments.net/reader033/viewer/2022051109/5485f32ab4af9fb37a8b4668/html5/thumbnails/13.jpg)
...horrível para multiplataforma
...inpensável para alto desempenho
...lento para IO pesado
...
![Page 14: Shell script](https://reader033.fdocuments.net/reader033/viewer/2022051109/5485f32ab4af9fb37a8b4668/html5/thumbnails/14.jpg)
Redirecionamento
![Page 15: Shell script](https://reader033.fdocuments.net/reader033/viewer/2022051109/5485f32ab4af9fb37a8b4668/html5/thumbnails/15.jpg)
$ ## 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](https://reader033.fdocuments.net/reader033/viewer/2022051109/5485f32ab4af9fb37a8b4668/html5/thumbnails/16.jpg)
$ ## 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](https://reader033.fdocuments.net/reader033/viewer/2022051109/5485f32ab4af9fb37a8b4668/html5/thumbnails/17.jpg)
$ ## 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](https://reader033.fdocuments.net/reader033/viewer/2022051109/5485f32ab4af9fb37a8b4668/html5/thumbnails/18.jpg)
$ ## 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](https://reader033.fdocuments.net/reader033/viewer/2022051109/5485f32ab4af9fb37a8b4668/html5/thumbnails/19.jpg)
$ ## Standard Input$$ comando < arquivo$ comando <<< texto
![Page 20: Shell script](https://reader033.fdocuments.net/reader033/viewer/2022051109/5485f32ab4af9fb37a8b4668/html5/thumbnails/20.jpg)
$ ## Pipe$ # Redireciona a saída padrão do$ # comando1 para a entrada padrão do$ # comando2 $ comando1 | comando2
![Page 21: Shell script](https://reader033.fdocuments.net/reader033/viewer/2022051109/5485f32ab4af9fb37a8b4668/html5/thumbnails/21.jpg)
Caracteres Curinga
![Page 22: Shell script](https://reader033.fdocuments.net/reader033/viewer/2022051109/5485f32ab4af9fb37a8b4668/html5/thumbnails/22.jpg)
Caracteres curinga parecem Regex,mas são DIFERENTES.
![Page 23: Shell script](https://reader033.fdocuments.net/reader033/viewer/2022051109/5485f32ab4af9fb37a8b4668/html5/thumbnails/23.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051109/5485f32ab4af9fb37a8b4668/html5/thumbnails/24.jpg)
$ ## 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](https://reader033.fdocuments.net/reader033/viewer/2022051109/5485f32ab4af9fb37a8b4668/html5/thumbnails/25.jpg)
Sintaxe
![Page 26: Shell script](https://reader033.fdocuments.net/reader033/viewer/2022051109/5485f32ab4af9fb37a8b4668/html5/thumbnails/26.jpg)
#!/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](https://reader033.fdocuments.net/reader033/viewer/2022051109/5485f32ab4af9fb37a8b4668/html5/thumbnails/27.jpg)
#!/bin/bash# Substituição de variáveis
var=”Ola”echo $var# echo Ola
![Page 28: Shell script](https://reader033.fdocuments.net/reader033/viewer/2022051109/5485f32ab4af9fb37a8b4668/html5/thumbnails/28.jpg)
#!/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](https://reader033.fdocuments.net/reader033/viewer/2022051109/5485f32ab4af9fb37a8b4668/html5/thumbnails/29.jpg)
$ # A passagens de parametros dos scripts$ # é feita de maneira posicional$$ ./myscript.sh parametro1 paramentro2
![Page 30: Shell script](https://reader033.fdocuments.net/reader033/viewer/2022051109/5485f32ab4af9fb37a8b4668/html5/thumbnails/30.jpg)
#!/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](https://reader033.fdocuments.net/reader033/viewer/2022051109/5485f32ab4af9fb37a8b4668/html5/thumbnails/31.jpg)
#!/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](https://reader033.fdocuments.net/reader033/viewer/2022051109/5485f32ab4af9fb37a8b4668/html5/thumbnails/32.jpg)
#!/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](https://reader033.fdocuments.net/reader033/viewer/2022051109/5485f32ab4af9fb37a8b4668/html5/thumbnails/33.jpg)
#!/bin/bash# Para fazer comparações use o builtin# command test...
a=1if test $a == 1thenecho "É igual"
elseecho "É diferente"
fi
![Page 34: Shell script](https://reader033.fdocuments.net/reader033/viewer/2022051109/5485f32ab4af9fb37a8b4668/html5/thumbnails/34.jpg)
#!/bin/bash# ... ou sua sintaxe com [ ]
a=1if [ $a == 1 ]thenecho "É igual"
elseecho "É diferente"
fi
![Page 35: Shell script](https://reader033.fdocuments.net/reader033/viewer/2022051109/5485f32ab4af9fb37a8b4668/html5/thumbnails/35.jpg)
#!/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](https://reader033.fdocuments.net/reader033/viewer/2022051109/5485f32ab4af9fb37a8b4668/html5/thumbnails/36.jpg)
#!/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](https://reader033.fdocuments.net/reader033/viewer/2022051109/5485f32ab4af9fb37a8b4668/html5/thumbnails/37.jpg)
#!/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](https://reader033.fdocuments.net/reader033/viewer/2022051109/5485f32ab4af9fb37a8b4668/html5/thumbnails/38.jpg)
#!/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](https://reader033.fdocuments.net/reader033/viewer/2022051109/5485f32ab4af9fb37a8b4668/html5/thumbnails/39.jpg)
#!/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](https://reader033.fdocuments.net/reader033/viewer/2022051109/5485f32ab4af9fb37a8b4668/html5/thumbnails/40.jpg)
#!/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](https://reader033.fdocuments.net/reader033/viewer/2022051109/5485f32ab4af9fb37a8b4668/html5/thumbnails/41.jpg)
#!/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](https://reader033.fdocuments.net/reader033/viewer/2022051109/5485f32ab4af9fb37a8b4668/html5/thumbnails/42.jpg)
#!/bin/bash# A declaração de funções é feito com a# palavra reservda function
function nome_da_funcao(){comando...
}
![Page 43: Shell script](https://reader033.fdocuments.net/reader033/viewer/2022051109/5485f32ab4af9fb37a8b4668/html5/thumbnails/43.jpg)
#!/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](https://reader033.fdocuments.net/reader033/viewer/2022051109/5485f32ab4af9fb37a8b4668/html5/thumbnails/44.jpg)
#!/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](https://reader033.fdocuments.net/reader033/viewer/2022051109/5485f32ab4af9fb37a8b4668/html5/thumbnails/45.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051109/5485f32ab4af9fb37a8b4668/html5/thumbnails/46.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051109/5485f32ab4af9fb37a8b4668/html5/thumbnails/47.jpg)
function soma(){echo $(($1 + $2))
}reduce "soma" "1 2 3 4"# 10
![Page 48: Shell script](https://reader033.fdocuments.net/reader033/viewer/2022051109/5485f32ab4af9fb37a8b4668/html5/thumbnails/48.jpg)
function concat(){echo $1$2
}reduce "concat" "O Rato Roeu A Roupa Do Rei De Roma"# ORatoRoeuARoupaDoReiDeRoma
![Page 49: Shell script](https://reader033.fdocuments.net/reader033/viewer/2022051109/5485f32ab4af9fb37a8b4668/html5/thumbnails/49.jpg)
# /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](https://reader033.fdocuments.net/reader033/viewer/2022051109/5485f32ab4af9fb37a8b4668/html5/thumbnails/50.jpg)
#/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](https://reader033.fdocuments.net/reader033/viewer/2022051109/5485f32ab4af9fb37a8b4668/html5/thumbnails/51.jpg)
Ajuda
![Page 52: Shell script](https://reader033.fdocuments.net/reader033/viewer/2022051109/5485f32ab4af9fb37a8b4668/html5/thumbnails/52.jpg)
● $man bash● http://aurelio.net/shell/● http://tldp.org/LDP/abs/abs-guide.pdf
![Page 53: Shell script](https://reader033.fdocuments.net/reader033/viewer/2022051109/5485f32ab4af9fb37a8b4668/html5/thumbnails/53.jpg)
Obrigado =)