Reddit – linux – Então qual é a melhor maneira de aprender bash?

A forma como aprendi qualquer língua não é sentar-me e ler um livro sobre ela apenas para a aprender, mas para ter um propósito em mente:

Quero automatizar X.

A seguir, começo a pensar no problema, e depois uso a Internet para descobrir a sintaxe para me levar de A a B.

Por exemplo, anos atrás eu queria acompanhar o tempo de funcionamento do meu sistema, quando eu tinha acabado de mudar do Windows que tinha que ser reinicializado a cada 48 horas e também porque eu era um grande nerd. Eu estava provocando um amigo online com ele, então eu queria atualizar o uptime do meu sistema aqui em casa, em uma página web que estava hospedada na Internet, em um servidor em outro estado.

Como fazer isto?

Bem, antes de mais nada, como é que eu começo a fazer um script que vai realmente correr.

#!/bin/bash <- Oh, specifies the script interpreter. LEARNED.

Hm, ainda não vai correr…

# chmod +x <- Oh, needs execute bit set. LEARNED.

Agora, como agarrar o tempo de uptime? Bem, eu podia separar o comando uptime, mas uma das funcionalidades que eu queria era seguir o meu “record uptime”. O comando uptime do Linux mostra o uptime em forma legível para humanos:

13:23:54 up 32 days, 4:19

Bem, isso é um pouco difícil de analisar como maior ou menor que isso. Pode ser feito, mas deve haver uma maneira mais simples. De onde será que o programa “uptime” está puxando esses dados? Um pequeno googling introduz-me ao sistema /proc:

/proc/uptime

Como é que eu leio isso? Existem algumas maneiras. A maneira que eu usei por hábito (e provavelmente é a maneira errada já que o comando cat não é realmente destinado para isso é:)

cat /proc/uptime

Que retorna:

2780345.41 5546896.19

OK, agora temos decimais agradáveis que tornam mais fácil descobrir se é um tempo de atividade recorde. Mas como é que eu agarro isso numa variável? Eu li mais um pouco online sobre backquotes:

UPTIME=`cat /proc/uptime`

Cool, agora eu tenho em uma variável. Nota mental, você pode ler todo tipo de coisas interessantes em variáveis desta maneira. Deve-se lembrar disso no futuro. APRENDIZADO. Além disso, do que se trata isso /proc? Ooh, todo o tipo de coisas boas aí como:

cat /proc/cpuinfo

OK então agora eu tenho este grande número decimal. Como é que eu converto isso em dias, para que eu tenha tempos de atividade como “23.8 dias”? Também cat /proc/cpuinfo retorna dois números. Qual eu quero? E como é que eu separo isso para ter apenas esse número? Eu li um pouco mais. Agora há algumas maneiras de separar um fio, mas a primeira coisa com que me deparo é com o comando cut. Como é que uso isso com um fio? Eu li um artigo sobre canalização e redirecionamento. Eu vejo os dois números separados por um espaço como delimitador, então:

NUMBERIWANT=`echo ${uptime} | cut -d " " -f 1`

Cool. Devo lembrar-me disso. Eu posso fazer coisas interessantes com esse cano. Eu arquivo isso mentalmente, junto com o comando cut, que será uma das ferramentas de linha de comando mais úteis que encontrei.

Agora, como transformar isso em dias…hm, decepcionante, bash tem suporte de matemática de merda. Hm, este artigo fala sobre bc. Um pouco de experimentação e:

uptime=`echo "scale=2; $uptime/86400" | bc`

Então, bc é o programa usado para fazer cálculos. Vou ter que me lembrar disso. Eu aprendi sobre backquotes e o pipe nos passos anteriores, então era óbvio como usar isso aqui.

Agora como faço eco a um arquivo de texto que eu posso usar como um include PHP no website (PHP aprendeu muito da mesma maneira)?

Ah, redirecionamento!

echo $uptime > ./uptime.txt

E assim por diante. Se eu olhar para os meus scripts antigos (este incluído), a codificação é ineficiente e não necessariamente como eu o faria agora. Mas à medida que acompanho este processo ao longo dos anos, minhas habilidades e conhecimentos melhoram, e ao me pintar em cantos por más práticas, eu aprendo a não fazer as coisas. Minhas metodologias melhoram para que os scripts sejam mais manuteníveis — não sentando em uma sala de aula ou lendo um livro, mas me lixando e aprendendo com ele.

NOTE: Eu não sou um desenvolvedor profissional. Eu escrevo scripts principalmente para meus próprios propósitos (hobbyist). Sei que as pessoas com formação em informática podem ter objecções a este método de aprendizagem, mas até agora tem funcionado bem para mim. E é muito divertido porque ao invés de ser apenas uma espécie de exercício de leitura e memorização, eu estou conseguindo algo “fora dele” enquanto vou — scripts úteis.

Por falar nisso — bookmark isto se você não o fez. É fantástico:

Advanced Bash Scripting Guide — a maior parte do que eu sei sobre bash veio daqui.

Deixe uma resposta

O seu endereço de email não será publicado.