Declarar função em Shell Script como se declara em C [RESOLVIDO]

1. Declarar função em Shell Script como se declara em C [RESOLVIDO]

Douglas Jovenil Castilhos dos Santos
Schnapps

(usa Debian)

Enviado em 21/10/2016 - 00:32h

Boa noite pessoal
Primeiramente gostaria de me apresentar e dizer que sou novo no fórum
Bom basicamente me chamo Douglas, estudo programação entre outras áreas da tecnologia por paixão e etc...
Migrei para o Linux faz aproximadamente um mes e estou estudando Shell Script, estou com uma dúvida quanto a declaração de funções, gostaria de saber se existe algum meio de declarar a função como se faz em C, por exemplo:

Declaração de função em C:

int main(){
int nome_funcao(int parametros);

nome_funcao(parametros);
}

int nome_funcao(int parametros){
Comandos;
return alguma_coisa;
}

Com esse exemplo podemos ver que podemos chamar a função nome_função dentro da função main, ja no caso de shell script, um exemplo de declaração seria:

Declaração função em C:

#!/bin/bash

funcao_qualquer(){
comandos
}

funcao_qualquer

No caso de shell script podemos chamar a função apenas depois de declarar ela, a minha pergunta é a seguinte:
Existe algum meio em que eu possa criar em Shell Script uma função main e declarar uma função secundaria dentro da main (exatamente como em C) para depois eu poder chamar ela na main?
Pois digamos que eu faça um programa em shell com uma função principal, eu teria que criar todas minhas funções secundárias acima da principal para poder chama-las, o que ficaria um pouco encomodo pela falta de organização no programa.




  


2. MELHOR RESPOSTA

Perfil removido
removido

(usa Nenhuma)

Enviado em 21/10/2016 - 16:40h

Schnapps escreveu:

Acredito que não fui claro quanto a minha pergunta, então vamos lá.
Gostaria de apenas dar o NOME da função e não escreve-la em si, pois se notarmos a declaração de função em C, eu escrevo o nome da função (declaro) na main, e depois da main eu escrevo ela, gostaria de saber se é possível fazer isso:


#!/bin/bash

funcao_nome() # declara a função sem escreve-la

funcao_nome # chama a função

funcao_nome(){
comandos # escrever a função
}



Acredito que agora tenha ficado claro minha pergunta.


Shell script não é C.
Você não declara protótipo.

Precisa declarar para usar e precisa de chaves para declarar.

O correto é

funcao_nome() {  } 


e ainda sim dará erro.

Agora, com algo como

funcao_nome() { return 0; } 


não dará.

Para chamar a função está certo, se não necessitar parâmetros.

----------------------------------------------------------------------------------------------------------------
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: Declarar função em Shell Script como se declara em C

Marcelo Oliver
msoliver

(usa Debian)

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

Schnapps escreveu:

Boa noite pessoal
Primeiramente gostaria de me apresentar e dizer que sou novo no fórum
Bom basicamente me chamo Douglas, estudo programação entre outras áreas da tecnologia por paixão e etc...
Migrei para o Linux faz aproximadamente um mes e estou estudando Shell Script, estou com uma dúvida quanto a declaração de funções, gostaria de saber se existe algum meio de declarar a função como se faz em C, por exemplo:

Declaração de função em C:

int main(){
int nome_função(int parametros);

nome_função(parametros);
}

int nome_função(int parametros){
Comandos;
return alguma_coisa;
}

Com esse exemplo podemos ver que podemos chamar a função nome_função dentro da função main, ja no caso de shell script, um exemplo de declaração seria:

Declaração função em C (shell script):

#!/bin/bash

função_qualquer(){
comandos
}

função_qualquer

No caso de shell script podemos chamar a função apenas depois de declarar ela, a minha pergunta é a seguinte:
Existe algum meio em que eu possa criar em Shell Script uma função main e declarar uma função secundaria dentro da main (exatamente como em C) para depois eu poder chamar ela na main?
Pois digamos que eu faça um programa em shell com uma função principal, eu teria que criar todas minhas funções secundárias acima da principal para poder chama-las, o que ficaria um pouco encomodo pela falta de organização no programa.



Bom dia Douglas.
No shell script, as FUNÇõES devem ser declaradas no inicio do mesmo, e chamadas em qquer ordem.
Exemplo:
#!/bin/bash

FUNCAO01() { echo -e "\nESTA É A FUNCAO01\n" ; date ; }

FUNCAO02() { echo -e "\nESTA É A FUNCAO02\n" ; ls -l ; }

FUNCAO03() { echo -e "\nESTA É A FUNCAO03\n" ; cal ; }

echo -e "\n ESCOLHA A FUNÇãO:\n [1] FUNÇÃO 01\n [2] FUNÇÃO 02\n [3] FUNÇÃO 03\n"
read -p "OPÇãO: " -n1 OPC
case $OPC in
1) FUNCAO01 ;;
2) FUNCAO02 ;;
3) FUNCAO03 ;;
*) echo -e "\nOPÇÃO \"$OPC\" É INVALIDA\n" ;;
esac



Se a sua duvida foi sanada, marque o tópico como resolvido . . .
E, se a MINHA RESPOSTA foi ESCLARECEDORA, MARQUE-A como A MELHOR . . .


Att.:
Marcelo Oliver


4. Re: Declarar função em Shell Script como se declara em C [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 21/10/2016 - 14:45h

BASH aceita a palavra-chave function antes da declaração de função mas não é obrigatório colocar.

Para passar parâmetros você coloca em seguida da função. Imagine uma função declarada minha_funcao().

Passa-se parâmetros assim:

minha_funcao par_1 par_2 par_3 ...

Dentro do código do corpo da função serão lidos como $1 $2 $3 ... e a partir de $9 deve ser escrito ${10} ${11} ${12} ...

Ainda há algumas variáveis extras:

$@ equivale a todos os parâmetros juntos
$# equivale à quantidade de parâmetros

Se você precisar que a função retorne algum valor pode usar echo ao final. Por exemplo:

minha_funcao() {

a=$1
b=$2

echo $((a+b))

}


Daí você usa assim dentro do seu programa

minha_funcao 3 4

Ela escreve 7 na saída, que é a tela. Agora usando

resposta="$(minha_funcao 3 4)"

a variavel $resposta terá o valor 7.

É claro que este exemplo de soma dará problema se forem passados caracteres não numéricos como iydcijy kyfiyi no lugar de 3 e 4.
Cabe ao programador criar rotinas de verificação se forem necessárias. Estou escrevendo um artigo sobre isto.

----------------------------------------------------------------------------------------------------------------
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



5. Re: Declarar função em Shell Script como se declara em C

Douglas Jovenil Castilhos dos Santos
Schnapps

(usa Debian)

Enviado em 21/10/2016 - 16:33h

Acredito que não fui claro quanto a minha pergunta, então vamos lá.
Gostaria de apenas dar o NOME da função e não escreve-la em si, pois se notarmos a declaração de função em C, eu escrevo o nome da função (declaro) na main, e depois da main eu escrevo ela, gostaria de saber se é possível fazer isso:


#!/bin/bash

funcao_nome() # declara a função sem escreve-la

funcao_nome # chama a função

funcao_nome(){
comandos # escrever a função
}



Acredito que agora tenha ficado claro minha pergunta.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts