Pular para o conteúdo

Explorando a entrada de dados com READ em Bash Shell

Mostro algumas opções úteis no comando read que podem ajudar na hora de escrever certas funcionalidades nos scripts em Bash Shell, algumas me ajudaram recentemente.
Raimundo Alves Portela rai3mb
Hits: 69.024 Categoria: Shell Script Subcategoria: Introdução
  • Indicar
  • Impressora
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Usando as opções do read

Recentemente precisei manipular um pouco a entrada de dados em Bash Shell, obtendo o que o usuário digitar no console e fazendo alguns tratamentos. Em minhas pesquisas vi que o comando read tem várias opções que ajudam nessa tarefa.

Estou há uns meses aprendendo aos poucos sobre shell e ainda não tinha visto muito material usando essas opções do read, talvez por não haver a necessidade, ou porque para aprender mais sobre ele não basta "man read", e sim consultar diretamente o manual do bash quem tem mais de 3 mil linhas.

Então resolvi escrever esse material para ajudar a mostrar como estender o read.

O uso padrão, quem escreve scripts em shell já conhece:

read VARIAVEL

Que segue uma sintaxe comum a outras linguagens (por exemplo a Pascal).

Então vamos ver algumas opções que estendem os poderes do read.

I/O (imprimindo e lendo valores) ao mesmo tempo

read -p 'TEXTO' VARIAVEL

A opção -p originalmente mostra uma mensagem na saída de erro padrão, se você não estiver redirecionando essa saída para o vácuo (/dev/null) ou para nenhum outro lugar, será apresentada na tela do console normalmente.

Exemplo:

#!/bin/bash
# A entrada de dados é encerrada ao digitar a interrogação '?'
read -p "Digite sua pergunta? : " -d'?' PERGUNTA
echo
echo "$PERGUNTA"

Você pode inclusive digitar ENTER e mesmo assim o read não será encerrado (CTRL+C é covardia, ele faz parte do bash e vai encerrar).

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
   1. Usando as opções do read
   2. Mais opções e conclusão

StarDict - software de tradução de ótima qualidade!

Yad 0.16 - Eu quero sempre mais de ti

Apresentando o Yad - "zenity melhorado"

Otimizando o uso do seu disco rígido usando a mesma /home para várias distribuições

Consultas SQL pelo Terminal no Postgres, Mysql, SQL Server, etc

Shell Script: Primeiros conceitos

Criando um banner em flash no Linux

Recursos avançados do bash que você não aprende na escola

Mostrando dicas ao iniciar o terminal

Slackware - Script de instalação de programas

#1 Comentário enviado por azk em 11/10/2011 - 15:10h
Muito bom!
Vai me ajudar bastante nos meus estudos!
Valeu!
#2 Comentário enviado por ember em 12/10/2011 - 20:18h
haha legal cara, isso pode ser usado em C neh?
so mto novo em linux e em programacao, mas minha esperanca era usar isso read -d'w' com um timeout, tem como?
essa leitura pode ser colhida numa variavel em um prog c? dae nao precisa usar a getch do ncurses ne? ncurses nao ta funfando...
EDIT: agora q vi a parte 2 foi mal... mas como implemento em c? da?
#3 Comentário enviado por rai3mb em 13/10/2011 - 01:58h
Ola @ember
... mas minha esperanca era usar isso read -d'w' com um timeout, tem como?
Tem você pode juntar os diversos parâmetros para alcançar seu objetivo, veja:

read -p 'Digite algo em 5 segundos : (w - para sair)' -t 5 -d'w'

...essa leitura pode ser colhida numa variavel em um prog c?

Acho que não, não conheço muito ainda de C, mas fiz um teste com a função system e não deu certo:

#include <stdio.h>
#include <strings.h>
#include <stdlib.h>

int main(int argc, char **argv) {
system("read -t 5'");
}

Usando o parâmetro da erro:

read: 1: Illegal option -t




Contribuir com comentário

Entre na sua conta para comentar.