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
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.
#+ 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
#? 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
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="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.