Olá a todos!
Aqui vai uma dica bem interessante para quem está aprendendo shell script ou para quem já sabe mas nunca viu. Trata-se da criação de funções com parâmetros em shell script.
"Mas como assim funções com parâmetros?!"
Bem, pra quem já programa ou está aprendendo, sabe-se muito bem que funções, métodos etc são essenciais para um programa, pois dividem várias partes de um código em pequenas partes facilitando assim a manutenção e leitura do código, entre outras características claro.
Vamos supor um código na linguagem C onde é solicitado o nome da pessoa, a variável "_NOME" guardará a informação digitada, e então uma função, que definiremos com o nome de BoasVindas, pegará o conteúdo da variável "_NOME" e exibirá uma mensagem de boas vindas ao usuário.
Melhor que falar é fazer, né?!
#include <stdio.h>
void BoasVindas(char *nome){
printf("\n\nSeja Bem Vindo %s \n\n",nome);
}
int main()
{
char _NOME[30];
printf("Digite seu nome: ");
gets(_NOME);
BoasVindas(_NOME);
return 0;
}
Viram só como a função BoasVindas recebe o nome digitado pelo usuário?!
Pois então, no shell script também podemos fazer funções dessa forma, mas nele funciona um pouco diferente essa questão de passagem de parâmetros para funções. Veja:
#!/bin/sh
# Declaração de uma função em ShellScript
function BoasVindas(){
echo -e "\n\nSeja Bem Vindo $1 \n\n"
}
echo -n "Digite seu nome: "
read _NOME
# A variável _NOME receberá o que foi digitado pelo usuário
BoasVindas "$_NOME"
# Aqui passamos o conteúdo da variável _NOME como o 1º parâmetro para a função BoasVindas()
Notem que é bem mais simples que em C né?!
Bem, o que acontece em shell script é que:
- Primeiramente não necessitamos definir tipos de variáveis, exemplo INT, CHAR, BOOL etc;
- Funções em shell script NÃO recebem parâmetros na sua declaração, ou seja, em C fazemos void BoasVindas(char *nome), por exemplo. Já em shell devemos simplesmente fazer BoasVindas() ou function BoasVindas();
- Dentro da função BoasVindas() percebam que há um "$1", esse é o parâmetro que a função receberá, então caso queiramos passar mais de um parâmetro para a função, basta chamar dentro dela os valores respectivos aos parâmetros, ou seja, $1 = primeiro parâmetro, $2 = segundo parâmetro, $3 = terceiro ... $9 = nono parâmetro. Se a função tiver mais de 9 parâmetros, basta declarar da seguinte forma: ${10}, ${11} etc.
Pessoal não sei se ficou bem claro, não sou muito bom em explicações, mas creio que deu pra pegar a ideia, né?!
Qualquer coisa postem seus comentários.
Deixo aqui um shell script no qual informa a tabuada que o usuário deseja visualizar. Este script é um pouco mais complexo e é um bom exemplo para estudo:
#!/bin/sh
# Função que simula o PAUSE do DOS, ou seja, o programa só irá prosseguir quando o usuário pressionar ENTER
function Pause(){
tempo=True
while [ $tempo ]; do
echo -ne "\nPressione ENTER para prosseguir..."
read tempo
done
}
# Função para validação e execução da tabuada desejada pelo usuário
function Tabuada(){
# Nesse trecho é verificado se o usuário digitou um número maior que 10
if [ -z $1 ] || [ $1 -gt 10 ]; then
echo -e "\nTabuada $1 não existe...."
return 0
fi
# Aqui verificamos se 0 ou -0 foi digitado para cancelar a operação.
if [ $1 == 0 ] || [ $1 == -0 ]; then
echo -e "\n\nOperação cancelada...."
exit 0
fi
echo -e "\nTabuada de $1:"
# Fazemos uma contagem de 1 a 10 e multiplicamos cada valor com a informação passado pelo usuário
for _contador in `seq 1 10`
do
_resultado=`expr $_contador \* $1`
echo "$1 x $_contador = $_resultado"
done
}
# Criamos a variável abaixo para que seja feito um loop infinito, ou seja, o programa fica executando infinitamente até que o usuário digite 0
opcao=True
while [ $opcao ]
do
echo -ne "\nInforme a tabuada que deseja visualizar [ 1 a 10] ou 0 para sair: "
read opcao
Tabuada $opcao
Pause
clear
done
Então é isso pessoal... Espero que tenha sido útil e que tenham gostado! ;)