validando quandidade de leitura no read [RESOLVIDO]

1. validando quandidade de leitura no read [RESOLVIDO]

Jean César
dark777

(usa Linux Mint)

Enviado em 19/05/2024 - 21:12h

Ola galera beleza?

estou escrevendo um script simples e usando o comando read para ler até 4 inputs entao fiz isso:

read -p "$(echo -ne "header: ")" pipe string1 string2 string3

if [ $# -lt 4 ]; then
echo -e "\033[1;31mfields few arguments!\nUsage: header \"|\" \"string\" \"string\" \"string\"\n"
else
echo "$pipe $string1 $string2 $string3"
echo
fi

ao executar ele pede os inputs mas mostra que foram digitados poucos argumentos mesmo utilizando aspas ao digitar os argumentos como fazer a leitura corretaente?

estou me baseando neste vídeo https://www.youtube.com/watch?v=dHeNwosbtsI

wiki.anon


  


2. Re: validando quandidade de leitura no read[DUVIDA]

aguamole
aguamole

(usa KUbuntu)

Enviado em 19/05/2024 - 23:39h

Em comando fica assim:
i=0; while read -p "header: " pipe2; do string1+="${pipe2}"; echo "$(((i++)))"; [[ "${i}" == "3" ]] && break; done; echo "${string1}" 

Em script fica assim:
#!/bin/bash

i=0
while read -p "header: " pipe
do
string+="${pipe} " # O mais(+) é para ir sempre incrementando na variável, adicionei espaço para não ficar colado
echo "$(((i++)))" # Caso queira que apareça a contagem dos read com echo
[[ "${i}" == "3" ]] && break # Para colocar uma condição para termino do while para não ser infinito
done

echo "${string}" # Se quiser verificar se funciono imprimindo na tela com echo

Agora que eu vi o vídeo não entende o que o senhor estava falando.


3. Re: validando quandidade de leitura no read [RESOLVIDO]

aguamole
aguamole

(usa KUbuntu)

Enviado em 20/05/2024 - 00:04h

Agora eu entende, é que ele não deve ter explicado direto:
:~$ read -p "header: " pipe string1 string2 string3
header: arroz feijão mandioca panela
:~$ echo "$pipe $string1 $string2 $string3"
arroz feijão mandioca panela



4. Re: validando quandidade de leitura no read[DUVIDA]

Jean César
dark777

(usa Linux Mint)

Enviado em 20/05/2024 - 08:54h

aguamole escreveu:

Agora eu entende, é que ele não deve ter explicado direto:
:~$ read -p "header: " pipe string1 string2 string3
header: arroz feijão mandioca panela
:~$ echo "$pipe $string1 $string2 $string3"
arroz feijão mandioca panela


acho que entendi até mais ou menos por que eu fiz esta função:

#!/bin/sh

function shortHeader()
{
read -p "header: " HEADER1 HEADER2 HEADER3

if [ $# -lt 3 ]; then
echo -e "\n\033[1;31mUsage\033[1;32m: \033[1;34mheader \033[1;32m\"\033[1;34mstring\033[1;32m\" \"\033[1;34mstring\033[1;32m\" \"\033[1;34mstring\033[1;32m\"\033[0m\n"
else

local BORDER1="${HEADER1}"
local BORDER2="${HEADER2}"
local BORDER3="${HEADER3}"

echo -e "\033[32m+${BORDER1//?/-}--+${BORDER2//?/-}--+${BORDER3//?/-}--+\033[0m"
echo -e "\033[34m| \033[1;32m${HEADER1^} \033[1;34m| \033[1;32m${HEADER2^} \033[1;34m| \033[1;32m${HEADER3^} \033[1;34m|\033[0m"
echo -e "\033[32m+${BORDER1//?/-}--+${BORDER2//?/-}--+${BORDER3//?/-}--+\033[0m"
fi
}


Ao chamar a função no final do script da seguinte maneira:

shortHeader


Digito tres inputs mas mostra a seguinte mensagem:

Usage: header "string" "string" "string"


mas se eu fizer assim dentro do script:

shortHeader "filemame" "local" "date"


pego os tres inputs e assim ele mostra a saída por esta razão nao entendi bem se esta correto isso usei a linha abaixo para limitar a entrada de dados para 3 ou 4 inputs:

read -n3 -r -p "header: " HEADER1 HEADER2 HEADER3


mas ao executar a função só le dois caracteres e depois fecha o programa como fazer isso de maneira correta? seria eficiente usar while read?
wiki.anon


5. Re: validando quandidade de leitura no read [RESOLVIDO]

aguamole
aguamole

(usa KUbuntu)

Enviado em 20/05/2024 - 11:01h

Rapais, vc esta chamando o sh, e este é este é diferente do Bash.


6. Re: validando quandidade de leitura no read [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 20/05/2024 - 13:40h

Só um detalhe.
$# é referente aos argumentos passados pela "linha de comando" .

Att.: Marcelo


7. Re: validando quandidade de leitura no read [RESOLVIDO]

aguamole
aguamole

(usa KUbuntu)

Enviado em 20/05/2024 - 13:55h

Boa @msoliver ele quer pegar do read e não do terminal, bem colocado.


8. Re: validando quandidade de leitura no read[DUVIDA]

Jean César
dark777

(usa Linux Mint)

Enviado em 20/05/2024 - 19:14h

msoliver escreveu:

Só um detalhe.
$# é referente aos argumentos passados pela "linha de comando" .

Att.: Marcelo


esta contando a quantidade de argumentos passadas ao read.


wiki.anon


9. Re: validando quandidade de leitura no read[DUVIDA]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 20/05/2024 - 20:58h

dark777 escreveu:

msoliver escreveu:

Só um detalhe.
$# é referente aos argumentos passados pela "linha de comando" .

Att.: Marcelo


esta contando a quantidade de argumentos passadas ao read.
wiki.anon

#------------------------------------------------------------------------------#
A afirmação:
esta contando a quantidade de argumentos passadas ao read.
É incorreta!
#-----------------------------------------------------------------------------#
IFS="|" read -a strings
string00|string01|string02|string03|string04
echo ${strings[@]}
string00 string01 string02 string03 string04
echo ${#strings[@]}
5
#------------------------------------------------------#
#!/usr/bin/env bash
echo -e "Todos Args:$@\nQtdd Args:$#"
n=1
echo '#----------------------------#'
for x in $@;do
echo "$n $x";let n++;
done
echo '#----------------------------#'

./tst.sh um dois tres quatro cinco
Todos Args:um dois tres quatro cinco
Qtdd Args:5
#----------------------------#
1 um
2 dois
3 tres
4 quatro
5 cinco
#----------------------------#
read -p "header: " HEADER1 HEADER2 HEADER3
header: x00 x01 x02
#---------------------------#
echo $#
0
#--------------------------#
echo $HEADER{1,2,3}
x00 x01 x02
#--------------------------#
Leitura recomendada:
https://aurelio.net/shell/canivete/#variaveis
.
.
.
$# Número total de parâmetros da linha de comando ou função




10. Re: validando quandidade de leitura no read [RESOLVIDO]

Jean César
dark777

(usa Linux Mint)

Enviado em 20/05/2024 - 22:45h


msoliver escreveu:

dark777 escreveu:

msoliver escreveu:

Só um detalhe.
$# é referente aos argumentos passados pela "linha de comando" .

Att.: Marcelo


esta contando a quantidade de argumentos passadas ao read.
wiki.anon

#------------------------------------------------------------------------------#
A afirmação:
esta contando a quantidade de argumentos passadas ao read.
É incorreta!
#-----------------------------------------------------------------------------#
IFS="|" read -a strings
string00|string01|string02|string03|string04
echo ${strings[@]}
string00 string01 string02 string03 string04
echo ${#strings[@]}
5
#------------------------------------------------------#
#!/usr/bin/env bash
echo -e "Todos Args:$@\nQtdd Args:$#"
n=1
echo '#----------------------------#'
for x in $@;do
echo "$n $x";let n++;
done
echo '#----------------------------#'

./tst.sh um dois tres quatro cinco
Todos Args:um dois tres quatro cinco
Qtdd Args:5
#----------------------------#
1 um
2 dois
3 tres
4 quatro
5 cinco
#----------------------------#
read -p "header: " HEADER1 HEADER2 HEADER3
header: x00 x01 x02
#---------------------------#
echo $#
0
#--------------------------#
echo $HEADER{1,2,3}
x00 x01 x02
#--------------------------#
Leitura recomendada:
https://aurelio.net/shell/canivete/#variaveis
.
.
.
$# Número total de parâmetros da linha de comando ou função



Que &%¨% achei que passando variaveis ao read, poderia ser melhor que fazer:

HEADER1="$1"
HEADER2="$2"
HEADER3="$3"


wiki.anon


11. Re: validando quandidade de leitura no read [RESOLVIDO]

aguamole
aguamole

(usa KUbuntu)

Enviado em 21/05/2024 - 00:49h


dark777 escreveu:
Que achei que passando variaveis ao read, poderia ser melhor que fazer:

HEADER1="$1"
HEADER2="$2"
HEADER3="$3"

if [[ "$#" == "3" ]]
then
HEADER1="$1"
HEADER2="$2"
HEADER3="$3"
fi







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts