script

1. script

marli
marlirodrigues

(usa Outra)

Enviado em 13/10/2016 - 10:21h

Bom dia.

Poderiam me ajudar a entender meu erro? Quais parâmetros estou usando errado?Porque na hora de rodar só aparece "Número de parâmetros incorreto" e não finaliza . Estou tentando colocar um parâmetro a mais pra ele me dar a mensagem de incorreto e finalizar da forma que pede, mas quando coloquei os quatro parâmetros seria para mostrar os números pra finalizar.

Crie uma função que receba 3 números como parâmetro e mostre o valor do maior número. Caso seja recebido menos ou mais números como parâmetro deverá ser impressa a mensagem “Número de parâmetros incorreto”.
#!/bin/bash
clear
i=0
echo "Número: $1 10"
echo "Número: $2 15"
echo "Número:$3 5"
echo "Número $4 2"
if [ $2 -gt $1 ];
then
echo "$2"
else
if [ $1 $2 $3 $4 ]
echo "Número de parâmetros incorreto"
fi
done



  


2. Re: script

Perfil removido
removido

(usa Nenhuma)

Enviado em 13/10/2016 - 10:38h

O script está bem bagunçado. Tem coisas que não fazem sentido.

A variável que diz quantos parâmetros foram recebidos pela linha de comando é $#.

Ficaria mais ou menos algo como

if [ $# -ne 3 ]
then
...
fi


Eu não me lembrava porque estava confundindo com $@. :-)
Fiz uma busca no Google com "shell script numero de parametros" e caiu numa dica aqui do próprio VOL.
https://www.vivaolinux.com.br/dica/Trabalhando-com-parametros-em-Shell-Script

Daí esta avaliação de $# deve vir antes de todas.
Tem gente que iguala as variáveis $1, $2, $3 ... atribuindo a novas variáveis no sistema.
Uma coisa que não faz sentido é ter apenas três parâmetros e aparecer $4.

Ficaria com uma estrutura de algoritmo mais ou menos assim:

se a > b então
se a > c então
escreva a
senão
escreva c
senão
se b > c então
escreva b
senão
escreva c


De certa forma é mais ou menos isto.
Deixo as lacunas para você completar.

----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



3. Re: script

Renan Arantes
R3nan

(usa Debian)

Enviado em 13/10/2016 - 10:44h

segura ai

#!/bin/bash

if [ $# -gt 3 ] || [ $# -lt 3 ] ; then
echo "Numero de parametros incorretos!"
echo "Informe 3 numeros como parametros!"
else
if [ $1 -gt $2 ] && [ $1 -gt $3 ]; then
echo "$1 é maior que $2 e $3"
elif [ $2 -gt $1 ] && [ $2 -gt $3 ]; then
echo "$2 é maior que $1 e $3"
elif [ $3 -gt $1 ] && [ $3 -gt $2 ]; then
echo "$3 é maior que $1 e $2"
fi
fi




4. Re: script

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 13/10/2016 - 11:50h

marlirodrigues escreveu:

Bom dia.

Poderiam me ajudar a entender meu erro? Quais parâmetros estou usando errado?Porque na hora de rodar só aparece "Número de parâmetros incorreto" e não finaliza . Estou tentando colocar um parâmetro a mais pra ele me dar a mensagem de incorreto e finalizar da forma que pede, mas quando coloquei os quatro parâmetros seria para mostrar os números pra finalizar.

Crie uma função que receba 3 números como parâmetro e mostre o valor do maior número. Caso seja recebido menos ou mais números como parâmetro deverá ser impressa a mensagem “Número de parâmetros incorreto”.
#!/bin/bash
clear
i=0
echo "Número: $1 10"
echo "Número: $2 15"
echo "Número:$3 5"
echo "Número $4 2"
if [ $2 -gt $1 ];
then
echo "$2"
else
if [ $1 $2 $3 $4 ]
echo "Número de parâmetros incorreto"
fi
done

------------------------------------------------------------------
Bom dia Marli.
Solução:
#!/bin/bash
PARAMETROS() {
(($#!=3)) && { echo “Número de parâmetros incorreto” ; exit 1 ; } # Se a quantidade de parâmetros é diferente de 3 . . .
echo "TODOS: $@" #MOSTRA TODOS, SE NÃO PRECISAR, APAGUE OU COMENTE A LINHA
echo "TOTAL: $#" #MOSTRA A QUANTIDADE, SE NÃO PRECISAR, APAGUE OU COMENTE A LINHA
echo "MAIOR: $(sed 's/ /\n/g' <<< "$@"|sort -n|tail -n1)"
}
PARAMETROS $@
#TERMINA NA LINHA ACIMA


Explicando o COMANDO:
$(sed 's/ /\n/g' <<< "$@"|sort -n|tail -n1)"
sed 's/ /\n/g' <<< "$@" => Troca " " (ESPAÇO) por "\n" (nova linha) deixando um PARAMETRO POR LINHA
sort -n => Coloca em ordem CRESCENTE, deixando o maior na ultima linha
tail -n1 => "PEGA" a ultima LINHA, que sempre será o MAIOR PARÂMETRO.

Variável 	Parâmetros Posicionais
$0 Parâmetro número 0 (nome do comando ou função)
$1 Parâmetro número 1 (da linha de comando ou função)
... Parâmetro número N ...
$9 Parâmetro número 9 (da linha de comando ou função)
${10} Parâmetro número 10 (da linha de comando ou função)
... Parâmetro número NN ...
$# Número total de parâmetros da linha de comando ou função
$* Todos os parâmetros, como uma string única
$@ Todos os parâmetros, como várias strings protegidas
FONTE: http://aurelio.net/shell/canivete/#variaveis


É isso . . .
Qualquer dúvida, estou a disposição!
E Não ESQUEÇA:
Se a resposta foi ESCLARECEDORA, MARQUE-A como A MELHOR,
Dessa forma, ganho uns pontos no fórum . . .


Att.:
Marcelo Oliver


5. Re: script

Renan Arantes
R3nan

(usa Debian)

Enviado em 13/10/2016 - 11:55h

Grande Marcelo, muito legal a sua solução !

msoliver escreveu:

marlirodrigues escreveu:

Bom dia.

Poderiam me ajudar a entender meu erro? Quais parâmetros estou usando errado?Porque na hora de rodar só aparece "Número de parâmetros incorreto" e não finaliza . Estou tentando colocar um parâmetro a mais pra ele me dar a mensagem de incorreto e finalizar da forma que pede, mas quando coloquei os quatro parâmetros seria para mostrar os números pra finalizar.

Crie uma função que receba 3 números como parâmetro e mostre o valor do maior número. Caso seja recebido menos ou mais números como parâmetro deverá ser impressa a mensagem “Número de parâmetros incorreto”.
#!/bin/bash
clear
i=0
echo "Número: $1 10"
echo "Número: $2 15"
echo "Número:$3 5"
echo "Número $4 2"
if [ $2 -gt $1 ];
then
echo "$2"
else
if [ $1 $2 $3 $4 ]
echo "Número de parâmetros incorreto"
fi
done

------------------------------------------------------------------
Bom dia Marli.
Solução:
#!/bin/bash
PARAMETROS() {
(($#!=3)) && { echo “Número de parâmetros incorreto” ; exit 1 ; } # Se a quantidade de parâmetros é diferente de 3 . . .
echo "TODOS: $@" #MOSTRA TODOS, SE NÃO PRECISAR, APAGUE OU COMENTE A LINHA
echo "TOTAL: $#" #MOSTRA A QUANTIDADE, SE NÃO PRECISAR, APAGUE OU COMENTE A LINHA
echo "MAIOR: $(sed 's/ /\n/g' <<< "$@"|sort -n|tail -n1)"
}
PARAMETROS $@
#TERMINA NA LINHA ACIMA


Explicando o COMANDO:
$(sed 's/ /\n/g' <<< "$@"|sort -n|tail -n1)"
sed 's/ /\n/g' <<< "$@" => Troca " " (ESPAÇO) por "\n" (nova linha) deixando um PARAMETRO POR LINHA
sort -n => Coloca em ordem CRESCENTE, deixando o maior na ultima linha
tail -n1 => "PEGA" a ultima LINHA, que sempre será o MAIOR PARÂMETRO.

Variável 	Parâmetros Posicionais
$0 Parâmetro número 0 (nome do comando ou função)
$1 Parâmetro número 1 (da linha de comando ou função)
... Parâmetro número N ...
$9 Parâmetro número 9 (da linha de comando ou função)
${10} Parâmetro número 10 (da linha de comando ou função)
... Parâmetro número NN ...
$# Número total de parâmetros da linha de comando ou função
$* Todos os parâmetros, como uma string única
$@ Todos os parâmetros, como várias strings protegidas
FONTE: http://aurelio.net/shell/canivete/#variaveis


É isso . . .
Qualquer dúvida, estou a disposição!
E Não ESQUEÇA:
Se a resposta foi ESCLARECEDORA, MARQUE-A como A MELHOR,
Dessa forma, ganho uns pontos no fórum . . .


Att.:
Marcelo Oliver





6. Re: script

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 13/10/2016 - 12:19h

R3nan escreveu:
Grande Marcelo, muito legal a sua solução !


Obrigado R3nan!
Fui pelo caminho mais curto . . .

Marcelo Oliver




7. script

marli
marlirodrigues

(usa Outra)

Enviado em 13/10/2016 - 15:19h

R3nan escreveu:

Grande Marcelo, muito legal a sua solução !

msoliver escreveu:

marlirodrigues escreveu:

Bom dia.

Poderiam me ajudar a entender meu erro? Quais parâmetros estou usando errado?Porque na hora de rodar só aparece "Número de parâmetros incorreto" e não finaliza . Estou tentando colocar um parâmetro a mais pra ele me dar a mensagem de incorreto e finalizar da forma que pede, mas quando coloquei os quatro parâmetros seria para mostrar os números pra finalizar.

Crie uma função que receba 3 números como parâmetro e mostre o valor do maior número. Caso seja recebido menos ou mais números como parâmetro deverá ser impressa a mensagem “Número de parâmetros incorreto”.
#!/bin/bash
clear
i=0
echo "Número: $1 10"
echo "Número: $2 15"
echo "Número:$3 5"
echo "Número $4 2"
if [ $2 -gt $1 ];
then
echo "$2"
else
if [ $1 $2 $3 $4 ]
echo "Número de parâmetros incorreto"
fi
done

------------------------------------------------------------------
Bom dia Marli.
Solução:
#!/bin/bash
PARAMETROS() {
(($#!=3)) && { echo “Número de parâmetros incorreto” ; exit 1 ; } # Se a quantidade de parâmetros é diferente de 3 . . .
echo "TODOS: $@" #MOSTRA TODOS, SE NÃO PRECISAR, APAGUE OU COMENTE A LINHA
echo "TOTAL: $#" #MOSTRA A QUANTIDADE, SE NÃO PRECISAR, APAGUE OU COMENTE A LINHA
echo "MAIOR: $(sed 's/ /\n/g' <<< "$@"|sort -n|tail -n1)"
}
PARAMETROS $@
#TERMINA NA LINHA ACIMA


Explicando o COMANDO:
$(sed 's/ /\n/g' <<< "$@"|sort -n|tail -n1)"
sed 's/ /\n/g' <<< "$@" => Troca " " (ESPAÇO) por "\n" (nova linha) deixando um PARAMETRO POR LINHA
sort -n => Coloca em ordem CRESCENTE, deixando o maior na ultima linha
tail -n1 => "PEGA" a ultima LINHA, que sempre será o MAIOR PARÂMETRO.

Variável 	Parâmetros Posicionais
$0 Parâmetro número 0 (nome do comando ou função)
$1 Parâmetro número 1 (da linha de comando ou função)
... Parâmetro número N ...
$9 Parâmetro número 9 (da linha de comando ou função)
${10} Parâmetro número 10 (da linha de comando ou função)
... Parâmetro número NN ...
$# Número total de parâmetros da linha de comando ou função
$* Todos os parâmetros, como uma string única
$@ Todos os parâmetros, como várias strings protegidas
FONTE: http://aurelio.net/shell/canivete/#variaveis


É isso . . .
Qualquer dúvida, estou a disposição!
E Não ESQUEÇA:
Se a resposta foi ESCLARECEDORA, MARQUE-A como A MELHOR,
Dessa forma, ganho uns pontos no fórum . . .


Att.:
Marcelo Oliver




Se usar essa forma, os parâmetros conferem? Porque não roda. "Done" local errado.

#!/bin/bash
la=15
lb=10
lc=5
if [ $la > $lc ]; then
echo "$la"
else
if [ $lb > $lc ]; then
echo "$lb"
else
echo "$lc"
fi
done

Nesse caso, para dar "Número de parâmetros incorreto", como anunciado não pode colocar um a mais ou a menos para aparecer a mensagem? Porque se colocar os 3 não tem porque colocar "Número de parâmetros incorreto". não fará sentido no script.




8. Re: script

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 13/10/2016 - 16:36h

marlirodrigues escreveu:

R3nan escreveu:

Grande Marcelo, muito legal a sua solução !

msoliver escreveu:

marlirodrigues escreveu:

Bom dia.

Poderiam me ajudar a entender meu erro? Quais parâmetros estou usando errado?Porque na hora de rodar só aparece "Número de parâmetros incorreto" e não finaliza . Estou tentando colocar um parâmetro a mais pra ele me dar a mensagem de incorreto e finalizar da forma que pede, mas quando coloquei os quatro parâmetros seria para mostrar os números pra finalizar.

Crie uma função que receba 3 números como parâmetro e mostre o valor do maior número. Caso seja recebido menos ou mais números como parâmetro deverá ser impressa a mensagem “Número de parâmetros incorreto”.
#!/bin/bash
clear
i=0
echo "Número: $1 10"
echo "Número: $2 15"
echo "Número:$3 5"
echo "Número $4 2"
if [ $2 -gt $1 ];
then
echo "$2"
else
if [ $1 $2 $3 $4 ]
echo "Número de parâmetros incorreto"
fi
done

------------------------------------------------------------------
Bom dia Marli.
Solução:
#!/bin/bash
PARAMETROS() {
(($#!=3)) && { echo “Número de parâmetros incorreto” ; exit 1 ; } # Se a quantidade de parâmetros é diferente de 3 . . .
echo "TODOS: $@" #MOSTRA TODOS, SE NÃO PRECISAR, APAGUE OU COMENTE A LINHA
echo "TOTAL: $#" #MOSTRA A QUANTIDADE, SE NÃO PRECISAR, APAGUE OU COMENTE A LINHA
echo "MAIOR: $(sed 's/ /\n/g' <<< "$@"|sort -n|tail -n1)"
}
PARAMETROS $@
#TERMINA NA LINHA ACIMA


Explicando o COMANDO:
$(sed 's/ /\n/g' <<< "$@"|sort -n|tail -n1)"
sed 's/ /\n/g' <<< "$@" => Troca " " (ESPAÇO) por "\n" (nova linha) deixando um PARAMETRO POR LINHA
sort -n => Coloca em ordem CRESCENTE, deixando o maior na ultima linha
tail -n1 => "PEGA" a ultima LINHA, que sempre será o MAIOR PARÂMETRO.

Variável 	Parâmetros Posicionais
$0 Parâmetro número 0 (nome do comando ou função)
$1 Parâmetro número 1 (da linha de comando ou função)
... Parâmetro número N ...
$9 Parâmetro número 9 (da linha de comando ou função)
${10} Parâmetro número 10 (da linha de comando ou função)
... Parâmetro número NN ...
$# Número total de parâmetros da linha de comando ou função
$* Todos os parâmetros, como uma string única
$@ Todos os parâmetros, como várias strings protegidas
FONTE: http://aurelio.net/shell/canivete/#variaveis


É isso . . .
Qualquer dúvida, estou a disposição!
E Não ESQUEÇA:
Se a resposta foi ESCLARECEDORA, MARQUE-A como A MELHOR,
Dessa forma, ganho uns pontos no fórum . . .


Att.:
Marcelo Oliver




Se usar essa forma, os parâmetros conferem? Porque não roda. "Done" local errado.

#!/bin/bash
la=15
lb=10
lc=5
if [ $la > $lc ]; then
echo "$la"
else
if [ $lb > $lc ]; then
echo "$lb"
else
echo "$lc"
fi
done

Nesse caso, para dar "Número de parâmetros incorreto", como anunciado não pode colocar um a mais ou a menos para aparecer a mensagem? Porque se colocar os 3 não tem porque colocar "Número de parâmetros incorreto". não fará sentido no script.

Boa tarde Marli.
Um DETALHE IMPORTANTE:
Se quer aprender, tem que "estudar", não é para colocar comandos e sintaxes a esmo!!!

Se usar essa forma, os parâmetros conferem?
Que parâmetros?
Entendo como "parâmetros", $1, $2 , $1 . . .
No caso acima, foram definidas 03 variáveis, não relacionadas aos parametros.
Deveria fazer:
la=$1
lb=$2
lc=$3

Porque não roda. "Done" local errado.
NÃO RODA, pq tá ERRADO!
Os comando usados, NÃO REQUEREM o "DONE", não existe um "laço".

Além do ERRO no DONE, existe ERRO no CONDICIONAL!
if [ $la > $lc ]; then
echo "$la"
else
if [ $lb > $lc ]; then
echo "$lb"
else
echo "$lc"
fi


Nesse caso, para dar "Número de parâmetros incorreto", como anunciado não pode colocar um a mais ou a menos para aparecer a mensagem? Porque se colocar os 3 não tem porque colocar "Número de parâmetros incorreto". não fará sentido no script.
Isso é um CONDICIONAL:
(($#!=3)) && { echo “Número de parâmetros incorreto” ; exit 1 ; }
SÓ dá a MENSAGEM de ERRO, "SE" o Nº de parâmetros é diferente de "3"
Entenda as CRÍTICAS, como CONSTRUTIVAS.
Já venho acompanhando seus "scripts", e noto que você esta na "estaca 0".

OBS.: No ENUNCIADO, foi solicitado uma "FUNÇÃO", o que vc esta apresentando, não é FUNÇÃO!
Crie uma função que receba 3 números como parâmetro . . .

FUNÇÃO é o SCRIPT que eu SUGERI
#!/bin/bash
PARAMETROS() {
(($#!=3)) && { echo “Número de parâmetros incorreto” ; exit 1 ; } # Se a quantidade de parâmetros é diferente de 3 . . .
echo "Número MAIOR: $(sed 's/ /\n/g' <<< "$@"|sort -n|tail -n1)"
}
PARAMETROS $@
#TERMINA NA LINHA ACIMA

Salve o SCIPT acima com o nome PARAM.sh, de permissão de execução e execute-o, da seguinte forma:
./PARAM.sh 10 20 100 2
Número de parametros incorreto

/PARAM.sh 7 80 10
Número MAIOR: 80


Att.:
Marcelo Oliver


9. script

marli
marlirodrigues

(usa Outra)

Enviado em 14/10/2016 - 00:54h

msoliver escreveu:

marlirodrigues escreveu:

R3nan escreveu:

Grande Marcelo, muito legal a sua solução !

msoliver escreveu:

marlirodrigues escreveu:

Bom dia.

Poderiam me ajudar a entender meu erro? Quais parâmetros estou usando errado?Porque na hora de rodar só aparece "Número de parâmetros incorreto" e não finaliza . Estou tentando colocar um parâmetro a mais pra ele me dar a mensagem de incorreto e finalizar da forma que pede, mas quando coloquei os quatro parâmetros seria para mostrar os números pra finalizar.

Crie uma função que receba 3 números como parâmetro e mostre o valor do maior número. Caso seja recebido menos ou mais números como parâmetro deverá ser impressa a mensagem “Número de parâmetros incorreto”.
#!/bin/bash
clear
i=0
echo "Número: $1 10"
echo "Número: $2 15"
echo "Número:$3 5"
echo "Número $4 2"
if [ $2 -gt $1 ];
then
echo "$2"
else
if [ $1 $2 $3 $4 ]
echo "Número de parâmetros incorreto"
fi
done

------------------------------------------------------------------
Bom dia Marli.
Solução:
#!/bin/bash
PARAMETROS() {
(($#!=3)) && { echo “Número de parâmetros incorreto” ; exit 1 ; } # Se a quantidade de parâmetros é diferente de 3 . . .
echo "TODOS: $@" #MOSTRA TODOS, SE NÃO PRECISAR, APAGUE OU COMENTE A LINHA
echo "TOTAL: $#" #MOSTRA A QUANTIDADE, SE NÃO PRECISAR, APAGUE OU COMENTE A LINHA
echo "MAIOR: $(sed 's/ /\n/g' <<< "$@"|sort -n|tail -n1)"
}
PARAMETROS $@
#TERMINA NA LINHA ACIMA


Explicando o COMANDO:
$(sed 's/ /\n/g' <<< "$@"|sort -n|tail -n1)"
sed 's/ /\n/g' <<< "$@" => Troca " " (ESPAÇO) por "\n" (nova linha) deixando um PARAMETRO POR LINHA
sort -n => Coloca em ordem CRESCENTE, deixando o maior na ultima linha
tail -n1 => "PEGA" a ultima LINHA, que sempre será o MAIOR PARÂMETRO.

Variável 	Parâmetros Posicionais
$0 Parâmetro número 0 (nome do comando ou função)
$1 Parâmetro número 1 (da linha de comando ou função)
... Parâmetro número N ...
$9 Parâmetro número 9 (da linha de comando ou função)
${10} Parâmetro número 10 (da linha de comando ou função)
... Parâmetro número NN ...
$# Número total de parâmetros da linha de comando ou função
$* Todos os parâmetros, como uma string única
$@ Todos os parâmetros, como várias strings protegidas
FONTE: http://aurelio.net/shell/canivete/#variaveis


É isso . . .
Qualquer dúvida, estou a disposição!
E Não ESQUEÇA:
Se a resposta foi ESCLARECEDORA, MARQUE-A como A MELHOR,
Dessa forma, ganho uns pontos no fórum . . .


Att.:
Marcelo Oliver




Se usar essa forma, os parâmetros conferem? Porque não roda. "Done" local errado.

#!/bin/bash
la=15
lb=10
lc=5
if [ $la > $lc ]; then
echo "$la"
else
if [ $lb > $lc ]; then
echo "$lb"
else
echo "$lc"
fi
done

Nesse caso, para dar "Número de parâmetros incorreto", como anunciado não pode colocar um a mais ou a menos para aparecer a mensagem? Porque se colocar os 3 não tem porque colocar "Número de parâmetros incorreto". não fará sentido no script.

Boa tarde Marli.
Um DETALHE IMPORTANTE:
Se quer aprender, tem que "estudar", não é para colocar comandos e sintaxes a esmo!!!

Se usar essa forma, os parâmetros conferem?
Que parâmetros?
Entendo como "parâmetros", $1, $2 , $1 . . .
No caso acima, foram definidas 03 variáveis, não relacionadas aos parametros.
Deveria fazer:
la=$1
lb=$2
lc=$3

Porque não roda. "Done" local errado.
NÃO RODA, pq tá ERRADO!
Os comando usados, NÃO REQUEREM o "DONE", não existe um "laço".

Além do ERRO no DONE, existe ERRO no CONDICIONAL!
if [ $la > $lc ]; then
echo "$la"
else
if [ $lb > $lc ]; then
echo "$lb"
else
echo "$lc"
fi


Nesse caso, para dar "Número de parâmetros incorreto", como anunciado não pode colocar um a mais ou a menos para aparecer a mensagem? Porque se colocar os 3 não tem porque colocar "Número de parâmetros incorreto". não fará sentido no script.
Isso é um CONDICIONAL:
(($#!=3)) && { echo “Número de parâmetros incorreto” ; exit 1 ; }
SÓ dá a MENSAGEM de ERRO, "SE" o Nº de parâmetros é diferente de "3"
Entenda as CRÍTICAS, como CONSTRUTIVAS.
Já venho acompanhando seus "scripts", e noto que você esta na "estaca 0".

OBS.: No ENUNCIADO, foi solicitado uma "FUNÇÃO", o que vc esta apresentando, não é FUNÇÃO!
Crie uma função que receba 3 números como parâmetro . . .

FUNÇÃO é o SCRIPT que eu SUGERI
#!/bin/bash
PARAMETROS() {
(($#!=3)) && { echo “Número de parâmetros incorreto” ; exit 1 ; } # Se a quantidade de parâmetros é diferente de 3 . . .
echo "Número MAIOR: $(sed 's/ /\n/g' <<< "$@"|sort -n|tail -n1)"
}
PARAMETROS $@
#TERMINA NA LINHA ACIMA

Salve o SCIPT acima com o nome PARAM.sh, de permissão de execução e execute-o, da seguinte forma:
./PARAM.sh 10 20 100 2
Número de parametros incorreto

/PARAM.sh 7 80 10
Número MAIOR: 80


Att.:
Marcelo Oliver


Obrigado Marcelo.
Pude entender mais, realmente estou tendo muita dificuldade nessa matéria, até mesmo porque faço curso a distância, acredito também em crítica construtiva, assim então podemos analisar nossos erros e corrigi-los .
Refiz o script , rodou normalmente.
#!/bin/bash
#parincorreto.sh
var1="10"
var2="80"
var3="22"
var4="40"
echo "Nome do script: $0"
echo "Primeiro parâmetro: $var1"
echo "segundo parâmetro: $var2"
echo "terceiro parâmetro: $var3"
echo "quarto parâmetro: $var4"
echo "Todos os parâmetro: $var1 $var2 $var3 $var4"
echo "Número de parâmetro: $#4"
echo "Número de parâmetros incorreto"
echo "O número maior é: $var2"
fi
done








10. Re: script

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 14/10/2016 - 11:58h

marlirodrigues escreveu:

Obrigado Marcelo.
Pude entender mais, realmente estou tendo muita dificuldade nessa matéria, até mesmo porque faço curso a distância, acredito também em crítica construtiva, assim então podemos analisar nossos erros e corrigi-los .
Refiz o script , rodou normalmente.
#!/bin/bash
#parincorreto.sh
var1="10"
var2="80"
var3="22"
var4="40"
echo "Nome do script: $0"
echo "Primeiro parâmetro: $var1"
echo "segundo parâmetro: $var2"
echo "terceiro parâmetro: $var3"
echo "quarto parâmetro: $var4"
echo "Todos os parâmetros: $var1 $var2 $var3 $var4"
echo "Número de parâmetro: $#4"
echo "Número de parâmetros incorreto"
echo "O número maior é: $var2"
fi
done


==============================================================================
Boa tarde Marli.
Vou tentar não "dar bronca" . . . Rsrsrsrs
O seu script continua ERRADO!

1º - EXISTE um "fi" e um "done" (GRAFADOS em NEGRITO ACIMA) DESNECESSáRIOS. PORTANTO, ACUSA ERRO!!!!
2º - TOTALMENTE em DESACORDO com o ENUNCIADO

Somente use o "fi", quando usar o "if".

EXEMPLO "if ... then ...else...fi":

A=13
if ((A>10));then #TESTA CONDIÇÃO
echo "VERDADEIRO" #SAÍDA SE "CONDIÇÃO" É VERDADE
else
echo "FALSO" #SAÍDA SE "CONDIÇÃO" É FALSA
fi

SINTAXE REDUZIDA DO CONDICIONAL:
A=20
((A>10)) && echo "VERDADEIRO" || echo "FALSO" 


Somente use o "done", quando usar um "laço"(while, until, for).
EXEMPLO:

A=0
while ((A<10));do #TESTA CONDIÇÃO. ENQUANTO "A" É MENOR QUE 10, EXECUTE AS LINHAS ABAIXO
echo "$A" #"MOSTRA" VARIáVEL A
let A++ #ACRESCENTA 1 NA VAR "A"
done

============================================================
VAMOS ao ENUNCIADO:
Crie uma função que receba 3 números como parâmetro e mostre o valor do maior número.
Caso seja recebido menos ou mais números como parâmetro deverá ser impressa a mensagem “Número de parâmetros incorreto”.

A FUNÇÃO tem que RECEBER os PARÂMETROS, pela linha de COMANDO!!!!
Como citei na RESPOSTA ANTERIOR.
/PARAM.sh 7 80 10
A FUNÇÃO É quem vai avaliar qual é o MAIOR NÚMERO,
E "SE" a QUANTIDADE de PARÂMETROS é MAIOR ou MENOR que 3.
REVEJA o "CONCEITO" DE FUNÇÃO e PARÂMETROS.
============================================================

-------------------------------------------------------------------------------------
Em tempo . . .
realmente estou tendo muita dificuldade nessa matéria
No início, isso é NORMAL!!!!
Qdo comecei, não entendia NADA!!!!
Não fiz curso, aderi ao "autodidatismo".
-------------------------------------------------------------------------------------
Segue o "seu" SCRIPT, usando FUNÇÃO e PARÂMETROS:
#!/bin/bash
#PARAMETROS.sh
CVD="\e[0;38;5;118m"
CVM="\e[0;38;5;196m"
CAM="\e[0;38;5;11m"
CF="\e[m"

PEGA_PARAMETROS() {
if (($# == 3));then
echo -e ""$CVD"\nQuantidade de parâmetros correto"$CF""
echo "Nome do script: $0"
echo "1º parâmetro: $1"
echo "2º parâmetro: $2"
echo "3º parâmetro: $3"
echo "Todos os parâmetros: $@"
echo "Quantidade de parâmetros: $#"
#TESTA QUEM É o MAIOR
if (($1>$2 && $1>$3));then echo -e ""$CAM"1º PARÂMETRO Nº: \"$1\", É O MAIOR $CF"
elif (($2>$1 && $2>$3));then echo -e ""$CAM"2º PARÂMETRO Nº: \"$2\", É O MAIOR $CF"
elif (($3>$1 && $3>$2));then echo -e ""$CAM"3º PARÂMETRO Nº: \"$3\", É O MAIOR $CF"
fi
else
echo -e ""$CVM"\"Quantidade de parâmetros incorreta\""$CF""
fi
}
PEGA_PARAMETROS $@
#A LINHA ACIMA, FAZ PARTE Do SCRIPT


Salve-o com o nome PARAMETROS.sh, dê permissão de EXECUÇÃO,
chmod +x PARAMETROS.sh
Execute da seguinte forma:
./PARAMETROS.sh 10 15 2 


Marli, "estude" o SCRIPT ACIMA, e retorne para SANAR as DÚVIDAS....
A NOVIDADE é que TEM CORES . . .

Att.:
Marcelo Oliver






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts