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.

Personalize ou crie comandos próprios no Linux com o alias

Mesmo que você não conheça o comando alias, ele provavelmente já está sendo usado em seu sistema.
Os arquivos de configurações pessoais .bashrc ou .bash_profile devem ter uma série de configurações com o uso do alias.

“Alias”, quer dizer apelido.
Sua função é dar nomes curtos para sequências grandes de comandos.

Por exemplo, você pode criar um alias para realizar a atualização do seu sistema, na linha de comandos (CLI):


alias atualiza="sudo apt update"

atualiza

[sudo] senha para justincase: 

O arquivo de configuração .bashrc, presente no seu diretório home (no Debian), já vem com alguns alias predefinidos:

 
cat .bashrc | grep alias

# enable color support of ls and also add handy aliases
    alias ls='ls --color=auto'
    #alias dir='dir --color=auto'
    #alias vdir='vdir --color=auto'
    alias grep='grep --color=auto'
    alias fgrep='fgrep --color=auto'
    alias egrep='egrep --color=auto'
# some more ls aliases
alias ll='ls -l'
alias la='ls -A'
alias l='ls -CF'

No meu caso, a maioria está relacionada ao comando grep e ls.

Armazene os apelidos em um arquivo externo

Opcionalmente, você pode adicionar todos os seus alias a um arquivo externo, chamado .bash_aliases (ou outro nome, à sua escolha). Para isto, acrescente ao arquivo de configuração pessoal do Bash (.bashrc), as seguintes linhas:

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

No Debian, estas linhas já estão presentes. De forma que é possível já criar e editar o arquivo .bash_aliases.
Não é obrigatório. Apenas pode ajudar a organizar melhor seus arquivos de configuração do sistema.

Sugestões de alias para usar no seu sistema

Se há sequências de comandos muito longas e usadas, elas podem ser encurtadas em apelidos.
As sequências de atualização do sistema, por exemplo:

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

Você pode adicionar apelidos para chegar mais rápido às suas pastas de arquivos mais acessadas:

alias documentos="cd ~/Documentos"
alias scripts="cd ~/scripts/python"
alias vid="cd ~/Vídeos"
alias down="cd ~/Downloads/"
alias mus="cd ~/Músicas/"
alias wallp="cd ~/Imagens/wallpapers"

Alguns comandos úteis para o seu sistema:

alias sair="exit" # para encerrar a sessão no terminal atual
alias reset="systemctl reboot" # para reiniciar o sistema
alias desligar="systemctl poweroff" # para desligar o sistema
alias suspender="systemctl suspend" # para suspender o sistema
alias hibernar="systemctl hibernate" # para hibernar

Obtenha outras sugestões de uso do alias, neste artigo.


Saiba mais sobre as diferenças entre suspender, hibernar e hybrid-sleep.
Use sempre alias para criar apelidos curtos para sequências de comandos grandes — mas que não são tão extensos, que justifique criar um script. 😉
Você tem outras sugestões?! Então, conta pra gente, na caixa de comentários.

Como criar um registro da sua linha de comando no Linux

Você pode querer registrar todos os comandos dados durante uma sessão, no terminal.
Usualmente, para depois analisar com calma e, se for o caso, criar um script a partir deles, para automatizar a tarefa.
Pode ser útil também em aulas, quando o professor deseja aplicar um teste. O aluno apenas envia para ele o arquivo resultado.
O utilitário script inicia automaticamente a gravação (no arquivo typescript) de todas os comandos executados no seu terminal.
Quando terminar e desejar sair da gravação, use o comando exit.
Veja um exemplo:


script


Script iniciado, o arquivo é typescript
justincase@ultra-5 

echo "Toda esta linha será gravada em um arquivo chamado typescript."

ls # esta também.

exit

Script concluído, o arquivo é typescript

cat typescript

linux script save
Se preferir, é possível indicar um outro nome para o seu arquivo:


script meuarquivo.log

Como comportamento padrão, o script sobrescreve o arquivo existente.
Use a opção ‘–append’ ou ‘-a’ para adicionar código a um arquivo preexistente.


script --append backup.sh

Como manter a execução de um programa, mesmo após finalizar a sessão no Linux

Ao finalizar uma sessão no Linux (na GUI ou na CLI), o sistema operacional entende que todos os programas e processos iniciados pelo usuário devem ser fechados.
Terminar uma sessão não é a mesma coisa que desligar o computador.
Comumente, as pessoas encerram uma sessão, para iniciar outra, sob um novo perfil de usuário.
Este pode ser o momento ideal para executar programas de manutenção, como um script de backup, por exemplo.
O truque pode ser realizado com o utlitário nohup.

O nohup executa comandos imunes a hangups e envia seus resultados (output) a um terminal non-tty.
Em resumo, ele mantém o comando vivo, em execução, mesmo após o fim da sua sessão.
O nome é derivado da junção dos 2 termos: no hangup.

Veja um exemplo, tirado do manual do comando:


nohup wget site.com/file.zip

Outro caso em que ele pode ser útil, é na atualização do sistema.
Se você estava adiando o update, para não sobrecarregar a sua conexão, pode rodar o procedimento ao sair:


nohup sudo apt update

Webmasters podem se valer deste utilitário, para manter procedimentos em funcionamento, mesmo após se desconectarem do servidor remoto.
Como padrão, um arquivo será gerado no diretório local, em que o nohup foi executado, com o nome de nohup.out — contendo as saídas do comando que ele executou.
Para atualizar o sistema, abra um novo terminal e autentique-se como root. Agora rode o procedimento de atualização:


nohup apt update; apt -y full-upgrade


nohup: ignorando entrada e anexando saída a 'nohup.out'
Lendo listas de pacotes... Pronto
Construindo árvore de dependências
Lendo informação de estado... Pronto Calculando atualização... Pronto ...

Pode fechar o terminal.
Quando quiser verificar o andamento da sua atualização, basta dar uma olhada no arquivo nohup.out:


sudo cat nohup.out

linux terminal nohup apt