Cara assim deu certo, me explique esse %02d, o que é? e também se eu colocar %01d vai para uma casa, e se chegar em 10? como o bash tratará isso?
Justamente, o printf "%02d" 5 05
Imprime o nº com dois digitos . . .
Para ignorar o Nº de digitos, use o formato %s,
printf "%s" 5 5
SEpreferir, substitua o "printf" pelo "echo":
CASE=$(n=0;echo 'case $resposta in' ;for op in $(ls -1);do let n++; echo "$n) ls -l $op ;;\n";done;echo -e "*) AJUDA ;;\nesac\n")
Precisando, estou por aqui . . .
Se a resposta foi satisfatória/esclarecedora, . . . MARQUE o tópico como resolvido, e, se gostou da minha "solução", Marque a minha resposta como a melhor . . . . Dessa forma sou pontuado, o que incentiva a continuar compartilhando o conhecimento . . .
Att.:
marcelo oliver.
Quando mudo para echo e digito 1 por exemplo, recebo esse erro:
./case-dinamico.sh: eval: line 14: erro de sintaxe proximo do `token' não eperado `2'
e preciso que seja echo para eu conseguir percorrer o array no for
Segue alteração com o "echo"
CASE=$(n=0;echo 'case $resposta in' ;for op in $(ls -1);do let n++; echo "$n) echo -e \" A OPÇãO ESCOLHIDA, é: $n\n\" ;;";done;echo -e "*) AJUDA ;;\nesac\n")
Consegui agora percorrer o array e deu tudo certo, valeu pela ajuda, tava morrendo de tanto procurar como fazer isso já kkkk.
Só mais uma coisa, 01 porque tenho que colocar \""\ antes da variável para funcionar? 02 o que é isso? 03 e o eval faz exatamente o que?
dei uma pesquisada e li que eval tem que ser cuidadosamente utilizado para não causar problemas de segurança, 04 que falhas de segurança poderiam ocorrer pelo uso do eval?
Cara, era só mais "UMA" coisa, foram 04 . . . . . Rsrsrsrsrsr
01- uso o \$ é necessario, neste caso para que a VAR não seja resolvida nesse "echo", do mesmo modo, no 1º echo da var CASE usei aspa simples . . . .
02 - A "\" é usada para "escapar" o caracter, para que o mesmo seja interpretado literalmente
03 - Exemplo do eval:
echo "echo -e \" Se nao usar o eval, o 2º \"echo\" não é EXECUTADO\n MULTIPLICAÇãO:\n 5 x 5 = \$((5*5))\""
echo -e " Se nao usar o eval, o 2º "echo" não é EXECUTADO\n MULTIPLICAÇãO:\n 5 x 5 = $((5*5))"
eval $(echo "echo -e \" Se nao usar o eval, o 2º \"echo\" não é EXECUTADO\n MULTIPLICAÇãO:\n 5 x 5 = \$((5*5))\"")
Se nao usar o eval, o 2º echo não é EXECUTADO
MULTIPLICAÇãO:
5 x 5 = 25
Só uma "coisinha" . . . .
Marque a resposta como a melhor....
marcelo oliver
3. Re: Case dinamico [RESOLVIDO]
msoliverusa Debian
Post recolhido
Enviado em 10/02/2017 - 11:20h
yuttttttt escreveu:
Como crio um case dinamico? Já tentei de todas as formas que consegui imaginar, mas não consegui, só ficou a bugar meu codigo de tantos loops.
Preciso criar um case assim:
while true
do
read resposta
case $resposta in
$numero[$i])$comando[$i]
break
;;
*)opção errada
;;
esac
done
esse $numero tem que se o indice de um array ou um array contendo o indice do array, e o $comando os comandos que também é um array.
yuttttttt, bom dia.
Montei um "case dinamico" esses dias, mas, a situação é diferente...
Tenho um script, onde coloco os scrips de teste numa função, e, para evitar que a cada "função" incluída
tivesse que alterar o case, "automatizei" o mesmo.
Se interessar . . .
marcelo oliver
4. Re: Case dinamico [RESOLVIDO]
yutttttttusa Outra
Post recolhido
Enviado em 10/02/2017 - 12:20h
msoliver escreveu:
yuttttttt escreveu:
Como crio um case dinamico? Já tentei de todas as formas que consegui imaginar, mas não consegui, só ficou a bugar meu codigo de tantos loops.
Preciso criar um case assim:
while true
do
read resposta
case $resposta in
$numero[$i])$comando[$i]
break
;;
*)opção errada
;;
esac
done
esse $numero tem que se o indice de um array ou um array contendo o indice do array, e o $comando os comandos que também é um array.
yuttttttt, bom dia.
Montei um "case dinamico" esses dias, mas, a situação é diferente...
Tenho um script, onde coloco os scrips de teste numa função, e, para evitar que a cada "função" incluída
tivesse que alterar o case, "automatizei" o mesmo.
Se interessar . . .
marcelo oliver
Bom dia, passa ai para eu dar uma olhada, se não servir, as vezes ilumina a mente para criar o que preciso kkkk
5. Re: Case dinamico
thinomarusa Linux Mint
Post recolhido
Enviado em 10/02/2017 - 12:51h
while true
do
read resposta
case $resposta in
${numero[$i]})
echo "$comando[$i]"
break
;;
*)
echo "opção errada"
i=$((i+1))
;;
esac
done
Se não der certo, troque isso:
case $resposta in
${numero[$i]})
Por isso:
case $resposta in
$(echo ${numero[$i]}))
Se nada der certo, em última instância vc pode usar o eval.
6. Re: Case dinamico
yutttttttusa Outra
Post recolhido
Enviado em 10/02/2017 - 12:54h
thinomar escreveu:
while true
do
read resposta
case $resposta in
${numero[$i]})
echo "$comando[$i]"
break
;;
*)
echo "opção errada"
i=$((i+1))
;;
esac
done
Se não der certo, troque isso:
case $resposta in
${numero[$i]})
Por isso:
case $resposta in
$(echo ${numero[$i]}))
Se nada der certo, em última instância vc pode usar o eval.
Já tentei com eval, não deu certo. Vou tentar assim, mas creio q n vai dar certo. E não entendi sua lógica.
eval: line 33: erro de sintaxe próximo do `token' não esperado `)'
9. Re: Case dinamico
msoliverusa Debian
Post recolhido
Enviado em 10/02/2017 - 13:13h
yuttttttt escreveu:
msoliver escreveu:
yuttttttt escreveu:
Como crio um case dinamico? Já tentei de todas as formas que consegui imaginar, mas não consegui, só ficou a bugar meu codigo de tantos loops.
Preciso criar um case assim:
while true
do
read resposta
case $resposta in
$numero[$i])$comando[$i]
break
;;
*)opção errada
;;
esac
done
esse $numero tem que se o indice de um array ou um array contendo o indice do array, e o $comando os comandos que também é um array.
yuttttttt, bom dia.
Montei um "case dinamico" esses dias, mas, a situação é diferente...
Tenho um script, onde coloco os scrips de teste numa função, e, para evitar que a cada "função" incluída
tivesse que alterar o case, "automatizei" o mesmo.
Se interessar . . .
marcelo oliver
Bom dia, passa ai para eu dar uma olhada, se não servir, as vezes ilumina a mente para criar o que preciso kkkk
script01() {
echo -e "\nCOMANDOS DO \"script01\"\n"
}
#DESCRIÇÃO_DO SCRIPT_01
script02() {
echo -e "\nCOMANDOS DO \"script02\"\n"
}
#DESCRIÇÃO_DO SCRIPT_02
script03() {
echo -e "\nCOMANDOS DO \"script03\"\n"
}
#DESCRIÇÃO_DO SCRIPT_03
script04() {
echo -e "\nCOMANDOS DO \"script04\"\n"
}
#DESCRIÇÃO_DO SCRIPT_04
script05() {
echo -e "\nCOMANDOS DO \"script05\"\n"
}
#DESCRIÇÃO_DO SCRIPT_05
INICIO $1
marcelo oliver
10. Re: Case dinamico [RESOLVIDO]
yutttttttusa Outra
Post recolhido
Enviado em 10/02/2017 - 13:48h
msoliver escreveu:
yuttttttt escreveu:
msoliver escreveu:
yuttttttt escreveu:
Como crio um case dinamico? Já tentei de todas as formas que consegui imaginar, mas não consegui, só ficou a bugar meu codigo de tantos loops.
Preciso criar um case assim:
while true
do
read resposta
case $resposta in
$numero[$i])$comando[$i]
break
;;
*)opção errada
;;
esac
done
esse $numero tem que se o indice de um array ou um array contendo o indice do array, e o $comando os comandos que também é um array.
yuttttttt, bom dia.
Montei um "case dinamico" esses dias, mas, a situação é diferente...
Tenho um script, onde coloco os scrips de teste numa função, e, para evitar que a cada "função" incluída
tivesse que alterar o case, "automatizei" o mesmo.
Se interessar . . .
marcelo oliver
Bom dia, passa ai para eu dar uma olhada, se não servir, as vezes ilumina a mente para criar o que preciso kkkk
script01() {
echo -e "\nCOMANDOS DO \"script01\"\n"
}
#DESCRIÇÃO_DO SCRIPT_01
script02() {
echo -e "\nCOMANDOS DO \"script02\"\n"
}
#DESCRIÇÃO_DO SCRIPT_02
script03() {
echo -e "\nCOMANDOS DO \"script03\"\n"
}
#DESCRIÇÃO_DO SCRIPT_03
script04() {
echo -e "\nCOMANDOS DO \"script04\"\n"
}
#DESCRIÇÃO_DO SCRIPT_04
script05() {
echo -e "\nCOMANDOS DO \"script05\"\n"
}
#DESCRIÇÃO_DO SCRIPT_05
INICIO $1
marcelo oliver
Tentei e estou recebendo esse erro:
opcoes=$(echo 'conta=0;case $resposta in';for op in ${array_arquivos[@]};do echo "$conta)$conta ;;" let conta=$conta+1;done;echo -e '*) inexistente ;;nesac')
read resposta
eval $(echo "$opcoes")
#erro:
./casedinamico.sh: eval: line 18: erro de sintaxe próximo do `token' não esperado `)'
./casedinamico.sh: eval: line 18: `conta=0;case $resposta in ) ;; let conta=+1 ) ;; let conta=+1 ) ;; let conta=+1 ) ;; let conta=+1 *) inexistente ;; esac'
11. Re: Case dinamico [RESOLVIDO]
thinomarusa Linux Mint
Post recolhido
Enviado em 10/02/2017 - 13:50h
Qual interpretador vc tá usando na linha de shebang? sh? Se não for algo muito específico, mude para o bash, pois aqui está tudo funcionando normalmente, sem precisar do eval.
#!/bin/bash
12. Re: Case dinamico [RESOLVIDO]
yutttttttusa Outra
Post recolhido
Enviado em 10/02/2017 - 13:52h
thinomar escreveu:
Qual interpretador vc tá usando na linha de shebang? sh? Se não for algo muito específico, mude para o bash, pois aqui está tudo funcionando normalmente, sem precisar do eval.