Manual do Hacker Especial - Volume 2 (2019-07)

(Antfer) #1
Manual do Hacker Especial | 81

Dividir seu código em pedaços menores, cada um em seu
próprio arquivo e diretório, organiza seus projetos


exit 1
else
touch /var/run/backup.lock
tar -czf /mnt/backup-$(date +%Y-%m-%d).tgz /
home/jon
rm /var/run/backup.lock
fi
Neste exemplo, nós verificamos se existe um arquivo
bloqueado. Em caso positivo, não será criada uma nova
cópia de segurança, porque se supões que a anterior esteja
rodando. Se o arquivo bloqueado não existir, use else para
criá-lo, executá-lo e removê-lo em seguida.
Sugerimos que você reserve um tempinho para
examinar a página man do Bash para verificar quais
outros testes estão disponíveis. Embora tivéssemos dito
que não gastaríamos tempo falando sobre comandos
individuais do Bash que encontrarmos ao longo deste
artigo, o exit vale a pena comentar um pouco mais.
Quando um programa Bash ou comando termina, ele
retorna um valor numérico. 0 indica que tudo foi
completado com sucesso, enquanto qualquer outro
número sugere que algo deu errado.
Isto é particularmente útil quando combinado com a
variável? embutida, que armazena o código do comando
anterior. Isto permite que você controle a execução do seu
programa com base em se partes dele foi ou não concluída
com êxito.


Repetições (loops) For
Outra cola bem útil encontrada em quase toda a linguagem
de programação é for (laços de repetições), que é usada
para iterar sobre os grupos de objetos, permitindo que você
aplique o mesmo bloco de código de cada objeto em turnos.
No Bash, ela funciona de maneira similar à sentença if:
for file in $(ls); do
echo ${file}
done
Outro exemplo bobo, mas que ilustra a sintaxe. Após a
palavra-chave for vem uma variável de espaço reservado
(place holder) que aceitará, em turnos, cada valor na
expressão que vem após a palavra-chave in. Para as
palavras-chave do e done, marque o bloco, enquanto a
variável file pode ser referenciada internamente como
qualquer outra variável.
A característica final que todas as boas linguagens de
programação têm, e que você precisará para criar seus
scripts Bash os mais úteis quanto possíveis, é a função. A
criação e invocação de funções no Bash é bastante comum.
Para definir uma nova função, simplesmente dê um nome,
seguido por um par de parênteses e, em seguida, coloque o
código que pertence àquela função dentro de chaves:


func () {
echo “My first function.”
echo $1
}

func “hello”
Como você pode ver neste exemplo, o chamamento de
uma função é feito exatamente da mesma maneira como
se você estivesse executando um comando embutido no
Bash – você insere o nome da função, seguido por
qualquer argumento que você quiser passar para ele. Os
argumentos podem ser acessados como variáveis
numericamente rotuladas – $1 é o primeiro argumento, $2
é o segundo, e assim por diante.
O mesmo conjunto de variáveis permite que você
acesse argumentos que passam pelo seu script na linha de
comando também, assim você pode escrever programas
que ajam em determinados arquivos ou modificando seus
comportamento baseado em suas preferências. Imagine
que o seguinte arquivo estava gravado em name.bash:
#!/bin/bash
echo $1
jon@adam ~$ ./name Jon
Jon

Supremacia Bourne
Isto é tudo para o espaço que poderíamos dispor aqui,
mas com estes esclarecidos básicos, agora você deve ser
capaz de escrever scripts para automatizar qualquer
operação em sua máquina Linux. Mas lembre-se: caso
tenha deparado-se com uma tarefa complicada que você
não sabe como executar em parte do seu script, procure
por um programa existente que o ajudará a realizá-la e,
caso não dê certo, pense em como você pode usar
programas simples para fazer trabalhos mais complexos.
Em particular, os comandos grep, sort e cut são
especialmente úteis, como o sed (embora ele, por si só,
seja tema livro inteiro dedicado a ele).

Redirecionamento e tubulação


Todos es exemplos que nós
temos visto apresentaram sua
saída na tela, na sessão shell que
está sendo executada dentro do
seu terminal. No entanto, se você
acha que programas apenas
retornarão as suas saídas para a
tela, você terá uma surpresa.
Na verdade, os programas
enviam suas saídas em uma
“tubulação” chamada stdout.
Esta tubulação tem duas saídas:
uma está conectada ao programa
gerando a saída e a outra recebe
e processa a saída. Por padrão,
isso é algo a mais em sua tela,
mas não precisa ser.
Existem duas maneiras com as
quais você pode manipular esta
tubulação. Uma delas consite em
reconectar a saída, de modo a
redirecioná-la para um arquivo,
em vez da tela. Assim:
echo “Hello world” > hello.txt
Apenas para exclarecer, é o

caractere > que faz o
redirecionamento.
Existe outra tubulação também,
chamada stdin. Como você pode
imaginar, esta é utilizada para
controlar a fonte de uma entrada
para um programa. Uma das
características mais poderosas do
Bash é sua habilidade para
conectar a tubulação stdout de um
programa com a tubulação stdin
de outro. Veja:
ls | grep *.txt
Aqui, o | (em teclados
brasileiros, este caractere é
digitado pressionando [Shift]+\)
conecta a saída do comando Is à
entrada do comando grep que,
neste exemplo, filtra todos os
resultados, exceto aqueles que
terminam em .txt. Desta maneira,
você pode ligá-los em quantos
programas quiser e, como
resultado, criar dados bem
poderosos processados no Bash.

Grupo Unico PDF Passe@diante

Free download pdf