Shell Script: Linux REGEX, Variáveis e File Globbing

Linux

Jornada Shell Script: Parte 2 Linux REGEX

Tema Central: Variáveis de Ambiente, File Globbing e Expressões Regulares (REGEX) no Linux para aplicação em Shell Script

Versão 1

Emissão: 16 de julho de 2022

Validade: Indeterminada

Variáveis de Ambiente e REGEX Linux

Objetivo

Primeiramente, nosso objetivo neste artigo é capacitar à quem for de interesse na compreensão e execução de comandos essenciais para verificação e manipulação de variáveis de ambiente em um sistema operacional Linux e execução de comandos essenciais para verificação e manipulação de expressões regulares e file globbing em um sistema operacional Linux.

Pré-Requisitos

Conhecimento de comandos básicos no Linux conforme exposto na parte 1 desta jornada.

Do mesmo modo se faz necessário uma máquina com sistema operacional Linux para execução dos comandos apresentados neste artigo. Assim, nossa distribuição base será o Debian.

O que são Variáveis de Ambiente no Linux?

No Linux ou em qualquer sistema operacional, variáveis de ambiente são valores definidos ou dinâmicos que utilizamos nos processos do sistema em execução ou programas. Elas podem ser encontrados tanto em servidores quanto em desktops, ao nível de sistema operacional ou usuário. Portanto, esse entendimento é essencial para podermos analisar quando e como iremos trabalhar nossas estratégias de manipulação dessas variáveis nos nossos programas.

Exemplos de Variáveis do Sistema

printenv #Com esse comando podemos exibir valores de todas as variáveis carregadas no sistema ou
printenv PATH #o valor de uma variável específica, nesse exemplo a variável PATH mostrará o caminho dos executáveis do sistema
env #Comando que permite visualizar ou
env VAR="TextoVariavel" #modificar as variáveis de ambiente do sistema
set #Mostra, além das variáveis do ambiente, as variáveis da sessão atual e funções (veremos sobre funções em tópicos posteriores)

Variáveis de ambiente customizadas

Um usuário ou administrador Linux também pode definir suas próprias variáveis de ambiente.

VAR=TextoVariavel #Define o valor da variável $VAR
echo $VAR #Exibe o valor da variável $VAR, nesse exemplo exibiria na tela: TextoVariavel

Importante observar algumas regras de uso na hora de definir uma variável no Linux:

  • Não podemos deixar espaços em branco entre a variável e o sinal de igual
  • A variável não pode iniciar com numerais

Variáveis aceitam desde valores de strings à numerais, até mesmo saídas de comandos como podemos ver abaixo, nos dois padrões aceito pelo shell.

VAR=´echo "COMANDO ls" && ls -lh´
VAR=$(echo "COMANDO ls" && ls -lh)

Algumas dicas importantes:

echo $$ #Exibe o valor do PID (Process ID) do bash atual. Esse comando é muito útil em programas shell, quando temos a necessidade de abrir sub processos dentro do shell script.

O entendimento de como funcionam as variáveis de ambiente em um sistema Linux é providencial para podermos evoluir no assunto e podermos enfim construir nosso primeiro programa em Shell. 

Básico de expressões regulares (REGEX Linux)

O que é File Globbing?

Quando precisamos fazer consultas em arquivos e diretórios no Linux, mas precisamos referenciar esses arquivos com parte de seu nome e não seu nome completo, normalmente queremos usar caracteres “coringas”. O file globbing é responsável por fazer as combinações desejadas com base nos critérios e parâmetros definidos pelo administrador do sistema.

Exemplos de comandos com os principais parâmetros do file globbing.

Para os exemplos abaixo criei os seguintes arquivos e diretórios:

Arquivos: file1, file2, file3

Diretórios: filed, filedir

ls file[123] #Lista todos os arquivos e diretórios com nome file1 ou file2 ou file3
ls {file1,file2} #Lista somente os arquivos e diretórios com nome file1 e file2
ls file* #Lista todos os arquivos e diretórios iniciem com nome file
ls file? #Lista todos os arquivos e diretórios iniciem com nome file e tenham apenas um carácter seguinte

O que é REGEX Linux (Regular Expression)?

Apesar de ter algumas semelhanças com uso do file globbing, utilizamos as expressões regulares no Linux para análise de padrões de textos. Da mesma forma que o file globbing, iremos usar caracteres “coringas”, mas seu uso está normalmente ligado ao conteúdo de um arquivo ou saída de um comando e o funcionamento de seus parâmetros dar-se-a com pequenas diferenças se comparado ao file globbing.

Exemplos de comandos com os principais parâmetros do REGEX Linux

Para os exemplos abaixo inseri o seguinte conteúdo no arquivo file1:

Abacaxi
Joaquim
PIAUI
Shell
Sheel
Shell Script
Bash
Basshon-mon
CHUVA
#[]
grep [a-o] file1 #Filtra as linhas do arquivo file1 que contenham as vogais a, e, i, o
#^
grep ^A file1 #Filtra as linhas do arquivo file1 que iniciem com a letra A
#$
grep m$ file1 #Filtra as linhas do arquivo file1 que terminem com a letra m
#*
grep --color -i She* file1 #Filtra as linhas do arquivo file1 que contenham a string sh podendo ou não encontrar a string e conforme. Perceba que o funcionamento do asterisco é um pouco diferente do file globbing. Veja a representação destacada da saída do comando com cor destacada para a string que o shell interpretou como "match". A compreensão daquilo que o shell destaca é providencial para o bom funcionamento do seu programa.
file globbing vs Linux REGEX
#+
egrep --color She+ file1 #Filtra as linhas do arquivo file1 que contenham a string She, podendo o carácter e aparecer uma ou mais vezes
grep color no Linux
#?
egrep --color -i She? file1 #Filtra as linhas do arquivo file1 que contenham a string She, podendo o carácter e aparecer uma ou nenhuma vez
egrep --color She. file1 #Filtra as linhas do arquivo file1 que contenham a string She, com um carácter qualquer na sequência
#.*
egrep --color She.* file1 #Filtra as linhas do arquivo file1 que contenham a string She, com quaisquer caracteres na sequência. Essa opção se assemelha ao asterisco sozinho do file globbing 
egrep Linux

Algumas dicas importantes:

Às vezes precisamos proteger os caracteres no Linux para podermos fazer definições de variáveis ou buscas com REGEX e file globbing. Essa pode ser feita de algumas formas conforme os exemplos abaixo:

#"ASPAS DUPLA"
VAR="CONTEÚDO: $(grep sh file1)" #Garante que na variável VAR seja armazenado o texto CONTEÚDO seguido da saída do comando grep
#'ASPAS SIMPLES'
VAR='CONTEÚDO: $(grep sh file1)' #Garante que na variável VAR seja armazenado todo texto exatamente como foi escrito, sem interpretação de variáveis ou caracteres especiais
VAR
#
VAR="CONTEÚDO: $(grep sh file1)" #Outra forma de proteger um carácter especial em específico

O entendimento de como funciona o file globbing, as diferenças de uso para as expressões regulares é de fundamental importância para podermos evoluir no assunto e podermos enfim construir nosso primeiro programa em Shell.

Editor de Textos vi Linux

O que é o vi?

Podemos resumir o vi como um programa de edição de textos dos mais básicos e comuns dentro de qualquer distribuição linux. É muito importante para o administrador de sistemas conhecer os modos de uso desse programa. O domínio de uso dessa aplicação trás um enorme ganho de desempenho operacional uma vez que nem sempre teremos uma interface gráfica para nos auxiliar

Modos de uso do vi:

Logo que entramos no editor de texto vi, temos o que chamamos de modo de navegação

A tecla “i” inicia o modo de edição (insert mode)

Para retornar ao modo de navegação pressionamos ESC

No modo de navegação (ESC)  e pressionando a tecla “:” (dois pontos) entramos no modo de comando do vi

Modo de navegação

O “/” (barra) é utilizado para fazer buscas no vi, do mesmo modo que no less que vimos no capítulo 1 dessa jornada.
Obs: após buscar uma expressão podemos pressionar “n” para próxima ocorrência ou “shift n” para ocorrência anterior.

A tecla ? no modo de navegação também serve como busca mas em ordem reversa. A string será buscada da onde o cursor de navegação está para cima, e não para baixo como no caso da tecla “/” barra.

No modo navegação, dd é utilizado para recorte de linhas no vi. Para recortar várias linhas de uma única vez podemos usar a sintaxe d15d (nesse exemplo recortamos 15 linhas.

A tecla yy copia uma linha, podemos usar a mesma sintaxe de dd para múltiplas linhas.
ex: y15y.

A tecla “p” cola a linha copiada ou recortada.

Modo de comando:

:1 #O vi te levará para a primeira linha do arquivo
:$ #O vi te levará para a última linha do arquivo
:! #Podemos executar um comando no bash do sistema, fora do vi, sem sair do vi
r #No modo de comando usamos o "r" para dar um replace na string desejada
:wq #Salva o arquivo e sai do vi
q! #Sai do programa vi sem salvar as alterações. O ponto de exclamação força o comando utilizado, nesse caso "q" (quit)
:%s/DE/PARA/g #Comando muito útil para substituição de caracteres no vi com sintaxe muito parecida com sed que vimos no capítulo 1 dessa jornada
obs: o uso de expressões regulares, visto no capítulo 3 dessa jornada são aceitas.

Conclusão

Vimos no artigo de hoje bastante conteúdo sobre expressões regulares e file globbing. Também exploramos um pouco mais as variáveis de ambientes no Linux e aprendemos a usar o editor de textos do Linux, vi.

O uso de expressões regulares (REGEX) no Linux é de vital importância para que possamos fazer uma boa automação do nosso shell script, desse modo, caso não tenha entendido alguma parte deste material, volte, releia, pratique. Divida comigo suas dúvidas para darmos mais um passo com muita consistência nessa jornada, que está apenas começando.

Do mesmo modo, quando trabalhamos em ambientes produtivos, é comum a necessidade de usarmos o vi diretamente no shell, então saber utilizar um editor de texto padrão do linux é providencial para um administrador de sistema se diferenciar e ser capaz de resolver problemas ou gerar soluções rapidamente.

A jornada só termina quando você estiver dominando o assunto, montando suas rotinas e automatizando seus processos. Um abraço e até a próxima.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.