Faça você mesmo Shell Script. Script que mostra frases aletórias no seu prompt de comando

programação shell script


Quando abrimos o prompt de comando (shell) do Linux normalmente nós temos apenas o nosso nome de usuário, nome da máquina e prompt piscando esperando que digitemos algum comando. Mas isso não precisa sempre ser assim, o shell é altamente configurável por variáveis de ambiente e também podemos colocá-lo para realizar uma tarefa específica toda vez que o acessamos.

Nesse tutorial vou mostrar como criar um script que pega uma frase em um banco de dados e a mostre como boas vindas toda vez que o usuário abrir um prompt de comando ou abrir uma nova aba do shell.

Let's do it!!

Primeiro vamos ativar o diretório bin, que em distros como OpenSuse e Fedora vem criada por padrão, e por algum motivo no Linux Mint não vem, então por isso vamos criá-la.
Abra um terminal e certifique se de estar na pasta "/home/<seu_usuário>" e então digite o comando:
$> mkdir bin && cd bin          
Com o comando acima vamos criar e entrar no diretório em um único comando.

Explicando a diretório bin no Linux.

O diretório /usr/bin é onde ficam a maioria dos programas do usuário e com exceção dos programas de terceiros que usam a pasta /opt/, praticamente todos os programas instalados via gerenciador de pacotes (yum, zypper, apt-get etc) salvam os seus executáveis nessa pasta. A pasta "/home/<seu_usuário>/bin/" que acabamos de criar, serve de forma similar e nela qualquer script executável vai ser reconhecido pelo sistema como um programa com a diferença que o usuário pode criar e apagar diretamente os arquivos nela.

Próximo passo, criar um arquivo o qual será o nosso banco de dados (de frases) e para esse trabalho um arquivo txt deve ser suficiente. Então dentro do diretório "/home/<seu_usuário>/bin/" digite:
$> touch dbquotes.txt         
E dentro dele vamos colocar algumas frases. Eu sempre coloco as frases entre aspas e depois coloco o nome do autor depois, mantenha sempre esse padrão, não pule linhas e coloque uma frase por linha. Copie e cole as frases abaixo dentro do arquivo para termos com o que começar.
"A perfeição da própria conduta consiste em manter cada um a sua dignidade sem prejudicar a liberdade alheia." Voltaire
"A vida acontece nos fatos, não nas palavras. Confie apenas nos fatos" Alfred Adler
"Pequenas oportunidades podem ser o começo de grandes empreendimentos." Demóstenes
"Programação orientada a objetos é uma péssima ideia, que só poderia ter nascido na Califórnia." Edsger Dijkstra
Bom, agora que temos o nosso banco de frases (quotes) o qual podemos preencher com quantas frases quisermos, vamos criar o nosso shell script o qual vai sortear uma frase aleatoriamente e mostrar na tela.

Vamos criar o arquivo chamado frasedodia e torná-lo executável na mesma linha de comando.
$> touch frasedodia && chmod +x frasedodia         
Agora abra o arquivo "frasedodia" com o seu editor de texto preferido (eu uso o sublime3) e cole o conteúdo abaixo e depois salve.
#!/bin/bash
#constante
FILE_DB_PATH=~/bin/dbquotes.txt
echo "***** Frase do Dia *****"
echo " "
sort -R "$FILE_DB_PATH" | tail -1

Explicando o script shell frasedodia:

  • #!/bin/bash: Todo script shell (bash) deve começar com essa linha.
  • FILE_DB_PATH=~/bin/dbquotes.txt: Variável que vai guardar o caminho do arquivo que serve de bando de dados onde estão salvas as frases.
  • echo "***** Frase do Dia *****": Mostra Frase do Dia entre asteriscos.
  • echo " ": Mostra uma linha em branco para dar o efeito de pular linha.
  • sort -R "$FILE_DB_PATH" | tail -1: O comando sort -R embaralha em ordem aleatória as frases do arquivo e joga através do pipe ( | ) para o comando tail -1 onde pega apenas a ultima frase do arquivo. Como o arquivo é sempre embaralhado a ultima frase sempre muda.

Se você estiver acompanhando até aqui e tudo estiver correto, abra um novo prompt shell e digite o comando "frasedodia". Algo semelhante a imagem abaixo vai aparecer na tela, ou seja você criou um comando em shell script que mostra uma frase na tela toda vez que for digitado e quanto mais frases no arquivo melhor. Mas não é só isso.

Prompt de comando shell script
Prompt de comando Linux

Agora vem o pulo do gato.

Se quisermos que toda vez que o ao abrirmos o terminal apareça automaticamente uma frase nova e eleatória, precisamos alterar um arquivo de configuração do bash. Com seu editor de texto preferido abra o arquivo .bashrc, no meu caso estou usando o sublime3.
$> subl ~/.bashrc          
Na ultima linha desse arquivo (não mexa nas demais linhas) basta colocar o comando recém criado, 'frasedodia" e então salvar e fechar o arquivo.

Pronto esta feito, toda vez que abrir um novo prompt de comando será apresentada uma nova frase.

Plus: Para ficar mais interessante experimente instalar o cowsay e digitar como segue. O Cowsay é um programa, em modo texto, que pega a saída de texto de outra programa e mostra na tela como se fosse uma vaquinha falando ou pensando, sua variante é o cowthink

Para debians e variantes.
$> sudo apt install cowsay          
Para fedora
$> sudo yum install cowsay         
e para OpenSuse
$> sudo zypper in cowsay           

E agora experimente digitar o comando ou alterar o arquivo .bashrc para ver o que acontece.
$> frasedodia | cowsay               
cowsay ou cowthink comando modo texto

Bom é isso, espero que tenham se divertido em fazer esse programa em shell script Esse tutorial mostrou apenas o básico para ele funcionar no terminal, o programa completo (ainda não esta completo) tem algumas opções a mais, como um help e opção de mostrar a versão.

Se quiser ver o meu programa como ficou visite o meu github ou digite o seguinte comando para clonar o repositório no seu sistema.
 $> git clone https://github.com/MakoReactor/termquots.git       
e dentro da pasta criada digite para instalar no seu computador.
$> bash instalar.sh              
E por ultimo altere o seu arquivo .bashrc e coloque no final dele o comando recém criado qotd (acrônimo para "quote of the day") e até a próxima.

Comentários