Como concatenar strings na shell do Linux

Concatenar ou juntar cadeias de caracteres (ou, simplesmente, strings), na shell (ou linha de comando) do Linux é um trabalho fácil e descomplicado.
Apenas fique atento a alguns detalhes… e tudo terminará bem. 😉

O procedimento pode ser muito útil dentro de shell scripts ou para uso em arquivos de configuração do Bash.
Você pode concatenar strings dentro do seu .bashrc, para obter resultados ou “hackear” o seu sistema.

Para sermos objetivos, abra um terminal e vamos definir as seguintes variáveis, como exemplo:


variavel1="elias"
variavel2=".praciano"
variavel3=".com"

A concatenação consiste, de maneira resumida, em juntar os valores das 3 strings, acima. Isto pode ser feito assim:


meusite=$variavel1$variavel2$variavel3
echo $meusite

elias.praciano.com

Note que não precisa usar o símbolo ‘$’ ao definir as variáveis. Mas é obrigatório no momento de se referir e fazer operações com elas.

Introdução ao Bash scripting

Este post explora conceitos básicos necessários para criar seus primeiros scripts no Bourne-Again SHell (também conhecido como BASH).
Trata-se de um padrão bem estabelecido da indústria, presente em todas as grandes distribuições GNU/Linux, em vários sistemas operacionais UNIX-like e, recentemente, adotado no Windows.

Antes de nos debruçarmos sobre como criar variáveis, funções, fazer operações aritméticas e estruturas de controle, vamos ver alguns conceitos preliminares para rodar scripts em Bash.

Qual shell está em uso no meu sistema?

Abra um terminal.
Se você pretende dar algum comando, é a shell quem irá interpretar e executar as suas instruções.
O Bash é apenas uma das várias opções possíveis.
É padrão, mas as distribuições Linux oferecem outras opções.
Use o comando apropos para descobrir mais opções neste sentido:


apropos shell

Para saber qual a shell em uso no momento, use o comando echo:


echo $SHELL

/bin/bash

Tecnicamente, o comando exibiu a localização do aplicativo da shell e não “o nome” dela.
Isto quer dizer que é possível usar outra shell (como a csh, por exemplo) ou, ainda instalar uma nova, que seja mais adequada para você.
Caso você não esteja usando o Bash, basta rodar ele, da linha de comando:


bash

Chega o momento em que você precisa aprender a criar um ou outro script.
O principal objetivo é automatizar tarefas repetitivas.

Introdução ao shell scripting

Vamos começar com o tradicional hello world!
Abra o seu editor favorito. Sugiro o nano ou o vim — mas você pode usar qualquer outro com que se sinta mais confortável.
O importante é manter o terminal aberto para executar os scripts criados.
Crie um arquivo chamado hello.sh, com o seguinte conteúdo:

echo "Hello world!"

grave e saia do editor.
Agora execute as instruções contidas no arquivo hello.sh:


bash hello.sh

Hello world!

O bash é um interpretador e nós o usamos para ler e rodar as instruções em hello.sh.
Contudo, é comum indicar explicitamente o interpretador que queremos usar, no início do arquivo de script, assim:

#!/bin/bash
echo "Hello world!"

Esta é uma boa prática de programação, que vale a pena observar sempre.
Como curiosidade, esta primeira linha é tradicionalmente chamada (em inglês) de “shebang line” ou apenas “shebang” (#!).
Se tivéssemos um script com código na linguagem Python, a shebang seria

#!/usr/bin/python

Use o comando whereis para localizar o interpretador desejado:


whereis perl

perl: /usr/bin/perl5.24-x86_64-linux-gnu /usr/bin/perl
 /etc/perl /usr/share/perl /usr/share/man/man1/perl.1.gz

Como tornar um script executável

Ao tentar executar o nosso script, do jeito que ele se encontra, no terminal, sem usar o bash, como interpretador, vai retornar um erro:


./hello.sh

bash: ./hello.sh: Permissão negada

O sistema sabe que deve interpretar as instruções através do bash… mas não há permissões para isto.
Este é um dos motivos pelos quais se afirma que o Linux/UNIX é ambiente hostil para vírus, enquanto arquivos de instruções autoexecutáveis.
Para que um arquivo seja executável, ele precisa ter permissão para isso.
O comando chmod (change mode) é o que pode realizar esta tarefa:


chmod +x hello.sh
./hello.sh

Hello world!

Leia mais sobre por que precisamos usar ./ no início do nome dos scripts para executá-los.

A extensão do nome do arquivo de script

Diferente do ambiente DOS/Windows, no Linux não é necessário usar extensões, para indicar ao sistema qual é o tipo de arquivo.
É opcional e é útil para sabermos sobre o tipo, contudo.
Você pode, se quiser, alterar o nome do seu arquivo de script para apenas ‘hello’.
Pessoalmente, prefiro usar os nomes dos meus arquivos de script sempre com uma extensão indicadora da linguagem de interpretação de cada um.

Este é o básico para começar a escrever scripts.
Daqui para frente, seu arquivo de script só precisa ser preenchido com comandos úteis.

Como fazer backup automático do Linux em CD ou DVD

Há inúmeros tutoriais ensinando a fazer backup, Internet afora.
A melhor maneira de fazer seus backups continua sendo através de um script de execução automática. Assim, ninguém precisa se lembrar de realizar esta tarefa tão importante.

O script, que segue, usa o Bash e 3 programas básicos:

  • genisoimage — para criar uma imagem ISO, prontinha para ser gravada em CD ou DVD
  • growisofs — para queimar a imagem ISO na mídia, em branco, que se encontra no drive
  • cron — para agendar e executar o seu script

Vou também usar o espeak, no meu script, para obter um retorno audível sobre o procedimento.
Se preferir um script silencioso, bastar remover ou editar as linhas que façam referência ao programa.

Não lembro qual foi a última vez em que ouvi CD no computador. Também é raro assistir ao conteúdo de um DVD, atualmente.
É em função dos backups diários, que o meu drive continua sendo mais importante do que nunca.

Altere os exemplos dados, para que se encaixem melhor às suas necessidades e não esqueça de olhar o conteúdo dos links, caso queira obter mais informações sobre o assunto.

#!/bin/sh
# Este script depende do genisoimage, growisofs e do espeak (opcionalmente).

# Informa que o procedimento irá começar.
echo -e "\niniciando a sequencia de backup ... "
espeak -v pt-br "Iniciando a sequencia de backup."

# Criar o nome do arquivo de backup
hoje=$(date +'%A-%d-%m-%Y');
nomearquivo=backup-$hoje.iso
echo "criando o arquivo $nomearquivo"

# Cria a imagem .iso a partir do diretório ~/temp.
# Altere o nome do diretório para o mais adequado para você.
genisoimage -o $nomearquivo ~/temp
ls -l $nomedoarquivo

# Avisando que genisoimage terminou.
echo -e "\no arquivo $nomearquivo foi criado"
espeak -v pt-br "O arquivo ISO foi gerado."

# o CD/DVD será gravado.
# Verifique se o endereço do dispositivo está correto para o seu sistema.
echo -e "\na mídia será apagada para abrigar o novo arquivo de backup"
espeak -v pt-br "A mídia será apagada para abrigar o novo arquivo de backup"
growisofs -dvd-compat -Z /dev/dvdrw=$nomearquivo

espeak -v pt-br “estou falando em português.”

Verifique o script e, se tudo estiver de acordo com suas expectativas, insira uma chamada para ele no cron.

Referências

já falei antes sobre o genisoimage e o growisofs. Se tiver dúvidas, leia o post. 😉

http://crunchbang.org/forums/viewtopic.php?id=18298.

Sugestões de alias para usar no Linux

O comando alias permite facilitar a digitação de sequências de comandos muito grandes e/ou muito usadas, unificando tudo em apenas um nome (apelido).
Sugiro a leitura dos artigos relacionados (ao final) na seção de referências, caso queira se aprofundar um pouco mais no assunto.


Se você ainda não conhece o comando, por favor leia esta introdução.
Quando temos um procedimento complexo, que envolve uma série de linhas de comando para ser realizado, podemos montar um script — que, ao ser invocado, realiza toda a tarefa.
Shell scripts não são solução para tudo. Você pode associar uma pequena sequência de comandos a um alias.
Segue alguns exemplos.

Alias para troca de diretórios

O comando atende a heavy users de sistemas GNU/Linux ou UNIX.
Trocas constantes de diretórios, para realizar tarefas administrativas pode ser cansativo — até para quem é rápido no teclado.
Experimente estas sugestões:

# volta para o diretório pai do atual
alias ..="cd .." 

# volta 2 níveis de diretórios
alias ...="cd ../.."

# volta 3 níveis de diretórios
alias ....="cd ../../.." 

Também gosto da seguinte alternativa:

alias .2="cd ../.."
alias .3="cd ../../.."
alias .4="cd ../../../.."

Quando estiver realizando procedimentos em 2 diretórios diferentes e precisar ir e voltar frequentemente entre eles crie um apelido chamado ‘volta’:

alias volta='cd $OLDPWD'

crie alias para ir rapidamente para diretórios específicos:

alias docs="cd ~/Documentos"
alias facul="cd ~/Documentos/faculdade"
alias vids="cd ~/Vídeos"

Atalhos para listagens de diretórios

O comando ls permite uma série de ajustes de parâmetros e opções que podem ser incorporadas todas dentro de apelidos.
Veja algumas sugestões:

alias ll='ls -l'     
alias lf='ls -F'
alias l='ls -al'
alias lm="ls -al | more"

Para o ls sempre sair colorido:

alias ls="ls --color"

Alias para comandos de data e hora

Se você costuma checar o tempo no terminal, experimente estas configurações:

alias d='date +%F'
alias agora='date +"%T"'
alias hoje='date +"%d/%m/%Y"'

Force a confirmação de comandos

Para forçar a confirmação de comandos de copiar, mover ou apagar, sugiro estes:

alias cp='cp -i'
alias ln='ln -i'
alias mv='mv -i'
alias ln='ln -i'

Alias para comandos variados

Estou sempre pesquisando no meu histórico para rever o funcionamento de algum comando dado há algumas semanas atrás.
Criar um apelido para um procedimento que combine o comando history ao more ou ao comando grep é uma ótima ideia:

alias hm="history | more"
alias hg="history | grep -i"

veja um exemplo de uso deste último:


hg getconf

 1500  getconf LONG_BIT
 1502  man getconf
 1533  getconf -a | grep arq
 1534  getconf -a | grep -i bit

Segue um exemplo para encontrar arquivos no sistema:

alias ff="find / -type f -name"

Agora basta indicar o nome do arquivo, após ff:


ff hello.c

Para fazer buscas dentro dos subdiretórios atuais, use o comando assim:


alias buscar="find . -name "

buscar hello

./hello
./python/scripts/hello

O comando mount pode ser ajustado para exibir uma listagem em colunas organizadas:

alias mount="mount |column -t"

Use estes, para obter informações do sistema:

alias df="df -Tha --total"
alias du="du -ach | sort -h"
alias free="free -mt"
alias ps="ps auxf | more"

Note que já existem utilitários com estes nomes (df, du, free e ps).
O alias se sobrepõe ao nome de um comando preexistente.
Uma variante do último alias, da lista acima, permite buscar informações sobre um determinado processo:


alias psg="ps aux | grep -v grep | grep -i -e VSZ -e"

psg bash

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
justinc+ 28944  0.0  0.0  21992  6064 pts/0    Ss   10:26   0:00 bash

Segue algumas sugestões para fazer a atualização do sistema:

alias sau="sudo apt update"
alias alu="apt list --upgradable"
alias saf="sudo apt full-upgrade"

Para desligar, reiniciar, suspender, hibernar ...

# encerrar a sessão no terminal atual
alias sair="exit"   

# reiniciar o sistema
alias reset="systemctl reboot"

# desligar o sistema
alias desligar="systemctl poweroff"

# suspender o sistema
alias suspender="systemctl suspend"

# hibernar
alias hibernar="systemctl hibernate"

No artigo Como copiar arquivos na linha de comando com exibição do progresso da tarefa, ensino um truque interessante, com o uso do rsync e alias.
Não esqueça que as definições em alias são perdidas quando terminamos uma sessão.
Para que sejam persistentes, é necessário gravá-las em arquivos de inicialização do Bash, como .bashrc ou o .bash_profile ou, ainda, .bash_aliases.

Referências

https://www.networkworld.com/article/2782375/operating-systems/unix-tip--useful-unix-aliases.html.

https://www.linuxtrainingacademy.com/23-handy-bash-shell-aliases-for-unix-linux-and-mac-os-x/.

https://www.digitalocean.com/community/tutorials/an-introduction-to-useful-bash-aliases-and-functions.

https://lifehacker.com/398258/ten-handy-bash-aliases-for-linux-users.

https://www.cyberciti.biz/tips/bash-aliases-mac-centos-linux-unix.html.

Use o yes, para dar respostas automáticas no Linux

O aplicativo yes tem a função de repetir uma string, como resposta às requisições de outros programas.
Pode funcionar como um robô, pré-programado para dar uma mesma resposta a um outro programa.
Apesar do nome, a resposta, não precisa ser “yes”. Pode ser “no”, “não” ou qualquer outra coisa.
Veja um exemplo de execução:


yes "eu não quero ser repetitivo"

A instrução acima, irá fazer com que a cadeia “eu não quero ser repetitivo” seja repetida indefinidamente, até você a interromper, com as teclas Ctrl + c.
en não quero ser repetitivo
Pode usar o utilitário com o apt:


yes | apt full-upgrade

Se preferir que ele responda “no”, use-o assim:


yes no | apt full-upgrade

É um utilitário bem simples com uma função bem simplória.
Às vezes, ele pode ser bem útil.