Guia Completo do Comando read em Shell Script no Linux - Da Entrada do Usuário à Leitura Linha por Linha de Arquivos: Dicas Práticas

Visão Geral

Abordamos o uso essencial do comando read, indispensável para o tratamento de entrada interativa do usuário e análise (parsing) de dados de texto ao criar scripts Bash no Linux. Do tratamento básico de entrada ao mascaramento de senhas (-s), tempo limite (-t), divisão por delimitadores (IFS) e o processamento de arquivos linha por linha com loops while — técnica amplamente utilizada na prática —, você poderá dominar o comando por completo.

1. Fundamentos do Comando read, Prompt (-p) e Definição de Valores Padrão

Para criar e acessar um diretório dedicado para a prática com o comando read, execute o comando mkdir -p ~/read-demo && cd ~/read-demo.

mkdir -p ~/read-demo && cd ~/read-demo

O comando read lê uma linha da entrada padrão e a armazena em uma variável. Com a opção -p, você pode exibir uma mensagem de prompt orientando o usuário, e usar a sintaxe ${nome_da_variavel:-valor_padrao} para atribuir um valor padrão substituto caso a variável esteja vazia.
No resultado da execução, como nenhuma entrada direta foi passada ao comando read, a variável username permaneceu vazia, resultando na exibição do valor padrão guest de acordo com a sintaxe ${username:-guest}.
⚙️ [Principais Opções]

-p : Especifica a string do prompt de orientação a ser exibida na tela antes de receber a entrada.
-s : Ativa o modo secreto, ocultando os caracteres digitados na tela ao receber informações confidenciais, como senhas.
-t : Define um tempo limite de espera (em segundos), encerrando a leitura caso o tempo especificado expire.
-n : Limita a entrada ao número especificado de caracteres, encerrando imediatamente sem a necessidade de pressionar Enter.
-r : Não interpreta o caractere de barra invertida (\) como caractere de escape, lendo o texto exatamente em sua forma original.
-a : Divide as palavras inseridas com base em espaços em branco e as armazena sequencialmente em uma variável de array.
-d : Especifica um caractere delimitador personalizado para encerrar a entrada em vez da quebra de linha.

bash -c ‘read -p “사용자 이름을 입력하세요: " username; echo “입력된 사용자: ${username:-guest}” «< “tester”’

2. Mascaramento de Senha (-s) e Limite de Tempo de Entrada (-t)

Para continuar com a prática, execute o comando cd ~/read-demo para navegar até o diretório ~/read-demo criado anteriormente.

cd ~/read-demo

A entrada é recebida com a opção -s para mascarar a tela de digitação e a opção -t 5 para definir um tempo limite de 5 segundos.
Como a senha foi enviada com sucesso dentro do limite de tempo, o código de status de saída ($?) foi exibido como 0.

bash -c ‘read -t 5 -sp “비밀번호를 입력하세요 (5초 제한): " userpass; echo; echo “입력 완료 여부: $?” «< “secret1234”’

3. Uso do Delimitador (IFS) e da Opção -a para Múltiplas Variáveis e Divisão em Arrays

Para continuar com a prática, execute o comando cd ~/read-demo para navegar até o diretório ~/read-demo criado anteriormente.

cd ~/read-demo

Ao definir o Separador de Campos Interno (IFS) como uma vírgula (,), a string em formato CSV passada via Here-String (<<<) é lida pelo comando read e dividida entre as variáveis col1, col2 e col3.
No resultado da execução, o nome do servidor, o endereço IP e o nome do serviço contidos na string foram devidamente divididos e exibidos em cada variável de acordo com o delimitador especificado.

bash -c ‘IFS=”,” read -r col1 col2 col3 «< “server01,192.168.1.10,nginx”; echo “서버: $col1 | IP: $col2 | 서비스: $col3”’

Ao definir o delimitador (IFS) como dois-pontos (:) e utilizar a opção -a, a string no formato de /etc/passwd é dividida e armazenada na variável de array user_info.
O nome da conta (root) no índice 0 do array e o caminho do shell de login (/bin/bash) no índice 6 foram extraídos e exibidos com sucesso.

bash -c ‘IFS=":" read -ra user_info «< “root:x:0:0:root:/root:/bin/bash”; echo “계정명: ${user_info[0]}, 셸: ${user_info[6]}”’

4. Prática Essencial: Processamento de Arquivos Grandes Linha por Linha com Loop while e read -r

Para continuar com a prática, execute o comando cd ~/read-demo para navegar até o diretório ~/read-demo criado anteriormente.

cd ~/read-demo

Para praticar o processamento de arquivos linha por linha, crie o arquivo de exemplo em CSV servers.csv, contendo nomes de servidores e seus status operacionais separados por vírgula.

echo -e “server-web,running\nserver-db,stopped\nserver-cache,running” > servers.csv

Utilize o loop while em conjunto com o comando read -r e defina o Separador de Campos Interno (IFS) como vírgula (,) para ler cada linha do arquivo servers.csv de forma segura.
No resultado da execução, o nome e as informações de status de cada servidor registrados no arquivo foram divididos e atribuídos com sucesso às variáveis name e status, sendo exibidos de acordo com a formatação.

while IFS="," read -r name status; do echo “[상태 점검] $name 서버는 현재 $status 상태입니다.”; done < servers.csv

Até aqui, exploramos desde o uso básico do comando read em shell scripts Linux até técnicas comuns no dia a dia para ler arquivos linha por linha.
Com base nas diversas opções e exemplos apresentados hoje, experimente criar seus próprios scripts de automação interativa adaptados às suas necessidades.