Verificando se variavel conten string ou numero[RESOLVIDO]

1. Verificando se variavel conten string ou numero[RESOLVIDO]

Jean César
dark777

(usa Linux Mint)

Enviado em 16/05/2019 - 15:24h

wiki.anon

galera estou fazendo um programa em shell e estou tendo problemas ao testar o tipo de input da variável pois,
o usuário pode digitar tando ASDF quanto 1234, o meu objetivo é fazer com que a variável "leitura"
ao receber ambos os inputs diga se a mesma é um numero e o problema maior esta em
comparar com uma lista de arquivos no vetor que contém nomes de vários arquivos,
então eu teria que fazer uma buscas com essa variável no vetor ex:

FILES=($(ls /etc/profile.d/*))

read -p "enter string" leitura

leitura=asdf
ou
leitura=1


VAR=${FILES[@]##*/}

VAR="jdk.sh apache.sh"


tentei algo como:
locate $leitura ${VAR}

o meu objetivo é que ao usuário digitar o nome do programa que esta na variável $FILES
o mesmo mostre apenas o nome do arquivo, caso o arquivo seja inexistente ele dava exit,
comparando com nomes de arquivos reais dentro do vetor alguém poderia me ajudar com isso?






  


2. Re: Verificando se variavel conten string ou numero[RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 16/05/2019 - 17:56h


dark777 escreveu:

wiki.anon

galera estou fazendo um programa em shell e estou tendo problemas ao testar o tipo de input da variavel pois,
o usuário pode digitar tando ASDF quanto 1234, o meu objetivo é fazer com que a variável "leitura"
ao receber ambos os inputs diga se a mesma é um numero.
O problema maior esta em comparar com uma lista de vetores que contem nomes de vários arquivos,
então eu teria que fazer uma buscas com essa variável no vetor ex:

FILES=($(ls /etc/profile.d/*))

read -p "enter string" leitura

leitura=asdf
ou
leitura=1


VAR=${FILES[@]##*/}

VAR="jdk.sh apache.sh"


tentei algo como:
locate $leitura ${VAR}

o meu objetivo é que ao usuário digitar o nome do programa que esta na variavel $FILES
o mesmo mostre apenas o nome do arquivo, caso o arquivo seja inexistente ele dava exit,
comparando com nomes de arquivos reais dentro do vetor alguem poderia me ajudar com isso?

Boa tarde.
Segue sugestão:
#!/bin/bash
#TESTE se a VAR é LETRA ou NÚMERO
read -p " Digite algo: " var;
if [[ ${var} =~ ^([0-9]+)$ ]];then
stt="NÚMERO"
elif [[ ${var} =~ ^([[:alpha:]]+)$ ]];then
stt="LETRA"
else
stt="Não Definido"
fi
echo -e " \"${var}\" => ${stt}\n"


Lendo seu enunciado, vejo que não é necessário DEFINIR se a var é LETRA ou NÚMERO....
somente faça a busca em "${FILES[@]}"....
Exemplo:
if grep -wq "${leitura}" <<< ${FILES[@]};then
echo OK;
else
echo KOK;
fi



IMPORTANTE, Leia => echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver


3. Re: Verificando se variavel conten string ou numero[AJUDA]

Jean César
dark777

(usa Linux Mint)

Enviado em 17/05/2019 - 13:00h

msoliver escreveu:


dark777 escreveu:

wiki.anon

galera estou fazendo um programa em shell e estou tendo problemas ao testar o tipo de input da variavel pois,
o usuário pode digitar tando ASDF quanto 1234, o meu objetivo é fazer com que a variável "leitura"
ao receber ambos os inputs diga se a mesma é um numero.
O problema maior esta em comparar com uma lista de vetores que contem nomes de vários arquivos,
então eu teria que fazer uma buscas com essa variável no vetor ex:

FILES=($(ls /etc/profile.d/*))

read -p "enter string" leitura

leitura=asdf
ou
leitura=1


VAR=${FILES[@]##*/}

VAR="jdk.sh apache.sh"


tentei algo como:
locate $leitura ${VAR}

o meu objetivo é que ao usuário digitar o nome do programa que esta na variavel $FILES
o mesmo mostre apenas o nome do arquivo, caso o arquivo seja inexistente ele dava exit,
comparando com nomes de arquivos reais dentro do vetor alguem poderia me ajudar com isso?

Boa tarde.
Segue sugestão:
#!/bin/bash
#TESTE se a VAR é LETRA ou NÚMERO
read -p " Digite algo: " var;
if [[ ${var} =~ ^([0-9]+)$ ]];then
stt="NÚMERO"
elif [[ ${var} =~ ^([[:alpha:]]+)$ ]];then
stt="LETRA"
else
stt="Não Definido"
fi
echo -e " \"${var}\" => ${stt}\n"


Lendo seu enunciado, vejo que não é necessário DEFINIR se a var é LETRA ou NÚMERO....
somente faça a busca em "${FILES[@]}"....
Exemplo:
if grep -wq "${leitura}" <<< ${FILES[@]};then
echo OK;
else
echo KOK;
fi



IMPORTANTE, Leia => echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver





Entao eu estou fazendo um script que ao ser colocado em /usr/bin/<script>
o usuario ao iniciar algum serviço faria apenas:

bash$ <script> <programa> {start|restart|force-restart|stop|force-stop}
Senha:
servico iniciado e etc... etc..

ao inves de usar:

bash# /etc/profile.d/<programa.sh> start

eu nao entendi direito esta linha:
if grep -wq "${leitura}" <<< ${FILES[@]};then

por que "<<<" ?

nao seria simplesmente

if grep -wq "${leitura}" ${FILES[@]}; ?

wiki.anon


4. Re: Verificando se variavel conten string ou numero[AJUDA]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 17/05/2019 - 20:03h

dark777 escreveu:

msoliver escreveu:


dark777 escreveu:

wiki.anon

galera estou fazendo um programa em shell e estou tendo problemas ao testar o tipo de input da variavel pois,
o usuário pode digitar tando ASDF quanto 1234, o meu objetivo é fazer com que a variável "leitura"
ao receber ambos os inputs diga se a mesma é um numero.
O problema maior esta em comparar com uma lista de vetores que contem nomes de vários arquivos,
então eu teria que fazer uma buscas com essa variável no vetor ex:

FILES=($(ls /etc/profile.d/*))

read -p "enter string" leitura

leitura=asdf
ou
leitura=1


VAR=${FILES[@]##*/}

VAR="jdk.sh apache.sh"


tentei algo como:
locate $leitura ${VAR}

o meu objetivo é que ao usuário digitar o nome do programa que esta na variavel $FILES
o mesmo mostre apenas o nome do arquivo, caso o arquivo seja inexistente ele dava exit,
comparando com nomes de arquivos reais dentro do vetor alguem poderia me ajudar com isso?

Boa tarde.
Segue sugestão:
#!/bin/bash
#TESTE se a VAR é LETRA ou NÚMERO
read -p " Digite algo: " var;
if [[ ${var} =~ ^([0-9]+)$ ]];then
stt="NÚMERO"
elif [[ ${var} =~ ^([[:alpha:]]+)$ ]];then
stt="LETRA"
else
stt="Não Definido"
fi
echo -e " \"${var}\" => ${stt}\n"


Lendo seu enunciado, vejo que não é necessário DEFINIR se a var é LETRA ou NÚMERO....
somente faça a busca em "${FILES[@]}"....
Exemplo:
if grep -wq "${leitura}" <<< ${FILES[@]};then
echo OK;
else
echo KOK;
fi



IMPORTANTE, Leia => echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver





Entao eu estou fazendo um script que ao ser colocado em /usr/bin/<script>
o usuario ao iniciar algum serviço faria apenas:

bash$ <script> <programa> {start|restart|force-restart|stop|force-stop}
Senha:
servico iniciado e etc... etc..
ao inves de usar:
bash# /etc/profile.d/<programa.sh> start

eu nao entendi direito esta linha:
if grep -wq "${leitura}" <<< ${FILES[@]};then
por que "<<<" ?
nao seria simplesmente
grep -wq "${leitura}" ${FILES[@]}; ?
wiki.anon


Não!
Se colocar:
grep -wq "${leitura}" ${FILES[@]}
o grep entende que "${FILES[@]}" é um arquivo, e acusa erro... Arquivo XXXX não encontrado

Uma sugestão para ao seu script é:
#!/bin/bash
#USEI o zenity dessa forma, para evitar que informem parâmetros errados...
clear;
DIR="/etc/profile.d/";
ACTION=(force-reload restart start status stop)
programa=$(zenity --list --height="600" --title="#Programa#" --text "Selecione o Programa:" --radiolist --column "" --column "Opções" $(ls ${DIR}|xargs -i bash -c "echo false {}") 2>/dev/null)
acao=$(zenity --list --height="250" --title="#Ação#" --text "Selecione a Ação" --radiolist --column "" --column "Opções" $(printf "false %s " ${ACTION[@]}) 2>/dev/null)
${DIR}${programa} ${acao}


IMPORTANTE: =>
echo -e "$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')" 

Att.: Marcelo Oliver






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts