Shell Scripting – Comando read: Interagindo com os usuários – Ler dados do teclado e de arquivos – 26

Ler dados com o comando read em Shell Scripting

O comando read é utilizado em Shell Scripting para ler dados de entrada fornecidos pelo usuário. Ele permite capturar valores digitados no terminal e armazená-los em variáveis, tornando os scripts mais dinâmicos e interativos. O read é especialmente útil em scripts que precisam solicitar informações ao usuário e processar essas respostas.

Sintaxe do comando read

A sintaxe básica do read é a seguinte:

read [opções] nome_da_variavel

Onde nome_da_variavel é a variável que armazenará o valor digitado pelo usuário. Vejamos alguns exemplos de como usar esse comando em scripts.

Exemplos básicos de uso do read

1. Ler uma entrada simples

Esse exemplo captura um valor digitado pelo usuário e o armazena em uma variável chamada nome.

#!/bin/bash
echo "Digite seu nome:"
read nome
echo "Olá, $nome!"

Ao executar o script, o usuário verá o prompt para digitar seu nome. O valor será armazenado na variável nome e exibido com a saudação “Olá, <nome>!”.

2. Ler múltiplas variáveis em uma única linha

O comando read pode capturar várias variáveis de uma só vez:

#!/bin/bash
echo "Digite seu primeiro nome e seu sobrenome:"
read nome sobrenome
echo "Olá, $nome $sobrenome!"

Se o usuário digitar “Isaac Newton”, a variável nome armazenará “Isaac” e sobrenome armazenará “Newton”. Agora, o que acontece se o nome digitado for “Sir Isaac Newton”?

Neste caso, temos três palavras, e duas variáveis para armazená-las.  O que cada variável irá receber?

O comportamento do read aqui será o seguinte: a variável $nome recebe a primeira palavra, “Sir”. A segunda (e última variável), $sobrenome, recebe o restante do texto digitado após a primeira entrada – ou seja, “Isaac Newton”.

Isso ocorre porque o comando read atribui as palavras da entrada às variáveis na ordem em que são listadas, considerando os espaços em branco como separadores de palavras.

Porém, se a entrada tiver mais palavras do que variáveis especificadas, a última variável definida recebe todas as palavras restantes, incluindo espaços.

Opções úteis do comando read

O read oferece algumas opções que tornam o uso mais flexível:

  • -p: Exibe uma mensagem de prompt diretamente na linha do read.
  • -s: Oculta a entrada, útil para digitar senhas.
  • -t: Define um tempo limite para a entrada.
  • -n: Limita o número de caracteres que o usuário pode digitar.
  • -a: Armazena a entrada como uma matriz (array).

Vejamos alguns exemplos do comando read com essas opções.

Exemplos de uso com opções

Exemplo 1: Usar -p para exibir uma mensagem de prompt

A opção -p exibe uma mensagem diretamente no comando read, tornando o script mais limpo. Além disso, mantém o prompt de entrada na mesma linha da mensagem.

#!/bin/bash
read -p "Digite sua idade: " idade
echo "Sua idade é $idade anos."

Exemplo 2: Usar a opção -s para ocultar a entrada (como uma senha)

A opção -s é ideal para ocultar a entrada do usuário, comum em solicitações de senha.

#!/bin/bash
read -sp "Digite sua senha: " senha
echo -e "\nSenha armazenada com segurança."
echo "A senha digitada foi $senha."

Exemplo 3: Usar -t para definir um tempo limite

Com a opção -t, podemos definir um tempo limite para a entrada. Neste exemplo, se o usuário não digitar nada em 5 segundos, o comando read continua sem armazenar um valor.

#!/bin/bash
read -t 5 -p "Digite seu nome (você tem 5 segundos): " nome
if [ -z "$nome" ]; then
  echo "Tempo esgotado!"
else
  echo "Olá, $nome!"
fi

A opção -z dentro do condicional é usada para verificar se a variável $nome está vazia. Se estiver vazia (string com comprimento igual a zero), é retornado o valor true (verdadeiro); caso contrário, é retornado o valor false (falso).

Exemplo 4: Usar -n para limitar o número de caracteres

A opção -n permite limitar o número de caracteres. No exemplo abaixo, o usuário só pode digitar um caractere.

#!/bin/bash
read -n 1 -p "Deseja continuar? (s/n): " resposta
if [ "$resposta" = "s" ]; then
  echo -e "\nVamos prosseguir."
else
  echo -e "\n Até mais!."
fi

Exemplo 5: Usar -a para armazenar uma entrada em um array

Com a opção -a, o comando read armazena as palavras digitadas em um array, onde cada palavra ocupa uma posição.

No exemplo a seguir, entre com os nomes de três animais e após digitá-los, pressione enter.

#!/bin/bash
echo "Digite os nomes de três animais e pressione enter:"
read -a animais
echo "Animais escohidos: ${animais[0]}, ${animais[1]} e ${animais[2]}"

Ler palavras compostas ou frases com espaços

Se quisermos garantir que o read trate toda a linha como um único valor, podemos ajustar o valor da variável Internal Field Separator (IFS). Desta maneira o read captura tudo como uma única string, ignorando a separação das palavras por espaços.

Vejamos um exemplo.

#!/bin/bash
echo "Digite uma frase e pressione enter:"
IFS= read -r frase
echo "Frase digitada: $frase"

Aqui, o IFS= desativa a separação de palavras pelo espaço, e o -r impede que o read interprete \ como caractere especial.

O Internal Field Separator (IFS) é uma variável especial no Bash que define os delimitadores para a separação de palavras.

Por padrão, o IFS inclui espaço, tabulação e nova linha, o que significa que o Bash usa qualquer um desses caracteres como delimitador para dividir uma entrada em várias partes.

Ao alterar o valor do IFS, podemos controlar como o Bash interpreta e divide as entradas.

Trabalhar com variáveis de ambiente e read

O comando read também pode ser usado para capturar valores e armazená-los em variáveis de ambiente, o que é útil para definir variáveis temporárias no início de um script. Vejamos um exemplo:

#!/bin/bash
read -p "Digite o caminho do subdiretório em HOME: " subdiretorio
diretorio="$HOME/$subdiretorio"

if [ -d "diretorio" ]; then
  echo "O diretório diretorio existe."
else
  echo "O diretório diretorio não existe."
fi

Nesse exemplo, o script usa a variável subdiretorio como entrada para verificar a existência de um diretório dentro da pasta /HOME, acessada a partir da variável de ambiente $HOME, emitindo uma mensagem de acordo no terminal.

Em vez de solicitar um caminho completo, o script solicita apenas o nome do subdiretório dentro do diretório pessoal ($HOME).
O valor completo do caminho é construído concatenando $HOME com o nome do subdiretório fornecido pelo usuário.

Na sequência, temos alguns exercícios para você praticar mais o emprego do comando read em scripts do shell Bash. A resolução está na sequência.

Exercícios com comando read

  1. Crie um script que peça um número ao usuário, calcule e exiba o dobro desse número.
  2. Peça para que o usuário digite uma senha e a oculte com -s. Em seguida, exiba uma mensagem confirmando que a senha foi armazenada.
  3. Crie um script que solicite uma resposta do usuário (“sim” ou “não”) com um tempo limite de 3 segundos. Se o tempo esgotar, exiba “Tempo esgotado”.
  4. Crie um menu simples onde o usuário pode escolher uma opção (1, 2 ou 3). Use o comando read com -n 1 para capturar a entrada e exiba uma mensagem dependendo da escolha.

Resolução dos exercícios

Exercício 1

#!/bin/bash
read -p "Digite um número: " numero
dobro=$((numero * 2))
echo "O dobro de $numero é $dobro."

Exercício 2

#!/bin/bash
read -sp "Digite sua senha: " senha
echo -e "\nSenha armazenada com segurança."

Exercício 3

#!/bin/bash
read -t 3 -p "Você deseja continuar? (sim/não): " resposta
if [ -z "$resposta" ]; then
  echo "Tempo esgotado."
else
  echo "Você respondeu: $resposta"
fi

Exercício 4

#!/bin/bash
echo "Escolha uma opção:"
echo "1) Iniciar"
echo "2) Configurações"
echo "3) Sair"
read -n 1 -p "Digite sua escolha: " opcao
echo -e "\n"
case $opcao in
1)
  echo "Iniciar aplicação..."
  ;;
2)
  echo "Abrir configurações..."
  ;;
3)
  echo "Sair..."
  ;;
*)
  echo "Opção inválida."
  ;;
esac

Conclusão

O comando read é uma ferramenta muito importante em Shell Scripting, pois permite que scripts interajam com os usuários de maneira dinâmica.

Com o uso das opções adequadas, é possível controlar a entrada de dados, definir limites e até mesmo capturar senhas de forma segura.

Sobre Fábio dos Reis (1226 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 30 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Ciência e Tecnologia em geral, adora Viagens e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.

3 Comentários em Shell Scripting – Comando read: Interagindo com os usuários – Ler dados do teclado e de arquivos – 26

  1. As aulas são ótimas e o prof. Fábio é muito bom !!!

  2. Olá Fábio dos Reis. Gostaria de parabenizá-lo por total clareza em suas aulas. Se possível, tire uma dúvida desse iniciante em shell script. Porque nas aulas anteriores o comando echo foi precedido do uso de aspas duplas e nessa aula 26 não foi utilizado. Ele é opcional? Em quais casos seria obrigatório?

Escreva um comentário

Seu e-mail não será divulgado


*