Manipulação de strings
Nesta aula, você aprenderá as principais técnicas de manipulação de strings em Shell Script (Bash), incluindo como obter o comprimento de uma string, extrair substrings, converter entre maiúsculas e minúsculas e realizar substituições. Através de exemplos práticos e exercícios, você dominará essas operações fundamentais para processamento de texto em scripts.
Manipulação de strings é uma das tarefas mais comuns em shell scripting. Seja para processar nomes de arquivos, ler entradas do usuário ou formatar saídas, você frequentemente precisará modificar ou extrair partes de textos. Nesta aula, vamos explorar as funcionalidades nativas do Bash para trabalhar com strings, que são poderosas e eficientes, evitando a necessidade de chamar programas externos como sed ou awk em muitos casos.
O Bash oferece uma série de operadores e expansões de parâmetros que permitem manipular strings diretamente. Vamos cobrir quatro operações essenciais: obter o comprimento, extrair substrings, converter entre maiúsculas e minúsculas e realizar substituições. Ao final, você terá uma base sólida para aplicar essas técnicas em seus próprios scripts.
Comprimento
Para obter o comprimento de uma string em Bash, usamos a expansão de parâmetro ${#variavel}. Isso retorna o número de caracteres da string armazenada na variável. É uma operação simples, mas extremamente útil para validações, como verificar se uma entrada atende a um tamanho mínimo ou máximo.
Por exemplo, suponha que você queira garantir que um código de produto tenha exatamente 8 caracteres. Você pode usar o comprimento para validar a entrada. Além disso, o comprimento pode ser usado em loops para percorrer a string caractere por caractere, embora existam outras técnicas.
#!/bin/bash
# Exemplo de comprimento de string
nome="Shell Script"
echo "O nome '$nome' tem ${#nome} caracteres."
# Validando um código de 8 caracteres
codigo="ABC12345"
if [ ${#codigo} -eq 8 ]; then
echo "Código válido: $codigo"
else
echo "Código inválido: deve ter 8 caracteres."
fiSubstring
Extrair uma substring é uma operação comum quando você precisa de uma parte específica de um texto. O Bash permite isso através da expansão ${variavel:posicao:comprimento}. A posição é baseada em zero (o primeiro caractere é a posição 0). Se o comprimento for omitido, a substring vai até o final da string.
Essa funcionalidade é muito útil para extrair extensões de arquivos, partes de datas, ou qualquer segmento de uma string. Por exemplo, você pode extrair o ano de uma data no formato AAAA-MM-DD usando ${data:0:4}.
#!/bin/bash
# Exemplos de extração de substring
data="2025-03-14"
echo "Ano: ${data:0:4}"
echo "Mês: ${data:5:2}"
echo "Dia: ${data:8:2}"
# Extraindo do 4º caractere até o final
frase="Aprendendo Shell Script"
echo "A partir do 4º caractere: ${frase:3}"Maiúsculas/minúsculas
Converter strings para maiúsculas ou minúsculas é uma necessidade frequente, especialmente ao comparar entradas do usuário de forma case-insensitive. O Bash oferece operadores de expansão para isso: ${variavel^^} converte para maiúsculas e ${variavel,,} converte para minúsculas. Esses operadores funcionam apenas em Bash 4.0 ou superior, então verifique a versão do seu ambiente.
Além de converter a string inteira, você também pode converter apenas o primeiro caractere: ${variavel^} para maiúscula e ${variavel,} para minúscula. Isso é útil para capitalizar palavras.
#!/bin/bash
# Exemplos de conversão de maiúsculas/minúsculas
mensagem="Olá, Mundo!"
echo "Maiúsculas: ${mensagem^^}"
echo "Minúsculas: ${mensagem,,}"
# Capitalizar primeira letra
nome="joão"
echo "Capitalizado: ${nome^}"
# Comparação case-insensitive
resposta="SIM"
if [ "${resposta,,}" = "sim" ]; then
echo "Resposta confirmada."
fiSubstituição
Substituir partes de uma string é outra operação essencial. O Bash oferece duas formas principais: substituir a primeira ocorrência com ${variavel/padrao/substituicao} e substituir todas as ocorrências com ${variavel//padrao/substituicao}. O padrão pode ser uma string literal ou um padrão glob (como *).
Essa funcionalidade é muito usada para formatar textos, remover caracteres indesejados ou trocar separadores. Por exemplo, você pode substituir espaços por underscores em nomes de arquivos, ou remover prefixos/sufixos.
#!/bin/bash
# Exemplos de substituição
frase="O rato roeu a roupa do rei de Roma"
# Substituir primeira ocorrência de 'ro' por 'RO'
echo "Primeira: ${frase/ro/RO}"
# Substituir todas as ocorrências de 'ro' por 'RO'
echo "Todas: ${frase//ro/RO}"
# Remover espaços (substituir por nada)
sem_espacos="${frase// /}"
echo "Sem espaços: $sem_espacos"
# Trocar espaços por underscores
com_underscores="${frase// /_}"
echo "Com underscores: $com_underscores"Boas práticas e observações
Ao trabalhar com strings em Bash, lembre-se de sempre citar as variáveis entre aspas duplas, especialmente ao usar expansões, para evitar problemas com espaços ou caracteres especiais. Além disso, teste seus scripts em diferentes versões do Bash, pois algumas funcionalidades (como ^^ e ,,) não estão disponíveis em versões mais antigas.
Prefira usar essas expansões nativas em vez de comandos externos quando possível, pois são mais rápidas e evitam a criação de processos adicionais. No entanto, para manipulações mais complexas, pode ser necessário recorrer a ferramentas como sed ou awk.
Referências
- Bash Reference Manual: Shell Parameter Expansion
- Bash Conditional Expressions
- Advanced Bash-Scripting Guide: String Manipulation
- Bash Cheat Sheet
- ShellCheck - Shell Script Analysis Tool
Exercícios
- Escreva um script que receba uma string do usuário e imprima seu comprimento.
- Dada a string
"Shell Script é poderoso", extraia a palavra"Script"usando substring. - Converta a string
"bash"para maiúsculas e"LINUX"para minúsculas. - Substitua todas as ocorrências de
"a"por"@"na string"banana". - Escreva um script que receba uma string e, se ela tiver mais de 10 caracteres, imprima apenas os primeiros 10 caracteres seguidos de
"..."; caso contrário, imprima a string original.
#!/bin/bash
read -p "Digite uma string: " str
echo "Comprimento: ${#str}"#!/bin/bash
frase="Shell Script é poderoso"
# "Script" começa na posição 6 (0-based)
substring="${frase:6:6}"
echo "$substring"#!/bin/bash
s1="bash"
s2="LINUX"
echo "${s1^^}" # BASH
echo "${s2,,}" # linux#!/bin/bash
fruta="banana"
echo "${fruta//a/@}" # b@n@n@#!/bin/bash
read -p "Digite uma string: " str
if [ ${#str} -gt 10 ]; then
echo "${str:0:10}..."
else
echo "$str"
fi