Passagem de parâmetros para funções shell script

Publicado por Phillipe Smith em 20/05/2009

[ Hits: 76.902 ]

Blog: http://phillipelnx.com

 


Passagem de parâmetros para funções shell script



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! ;)

Outras dicas deste autor

Substituição avançada de texto no Vi/Vim

Posicionando o AWN (Avant Window Navigator)

Video Converter: Convertendo vídeos no Linux facilmente

Limpando a memória cache no Linux

Lakka - Uma distro para games retrô

Leitura recomendada

openSUSE - Carregando Script do IPtables no Boot

Monitoramento de link de internet de servidores

Como escrever em arquivos protegidos usando o sudo e redirecionamento

SSH simultâneo para vários servidores

Substituindo o sleep por um belo cronômetro regressivo

  

Comentários
[1] Comentário enviado por FIx3r em 15/02/2010 - 15:30h

Amigo, estava com uma dúvida relacionada a funções e fazendo uma busca aqui achei o seu artigo.
Eu tenho um script com duas funções e uma caixa de dialogo com um menu para você escolher uma das duas e o script irá executar a que o usuário escolher. Só que dá erro.
Olhei o seu script e vi que é um pouco parecido com o que eu fiz a minha só que seu script não roda aqui e nem o meu.

O meu deve conter algum erro mas não sei porque o seu não rodou. se puder me dar uma ajuda ficaria grato.


======================================================================


script

#!/bin/bash

function Principal(){
cont=dialog --yesno 'Gostaria de Prosseguir?' 0 0
if[[cont == "0"]] then
dialog --title 'Digite Seu Nome:' --inputbox '\n Nome:' 0 0

dialog --title 'Aguarde' --infobox '\n ...' 0 0
done
}

function segunda(){
dialog --yesno 'Do you like me?' 0 0
if [$? = 0]then
echo "So do I"

done
}

echo "escolha a função que você quer executar"

dialog --title 'Funções:' --inputmenu 'Escolha uma das funções para executar: $


Primeira
sleep 5
segunda
sleep 5


======================================================================


[2] Comentário enviado por Smithux em 15/02/2010 - 16:42h

FIx3r,
Enviei pra você o script corrigido!
Espero que ajude! x)

[3] Comentário enviado por dikson em 21/03/2010 - 20:49h

Valeu parceiro, vc conseguiu explicar td de forma simples e clara . muito bom esse tópico

[4] Comentário enviado por ygor.amaral em 18/07/2010 - 20:37h

Amigo, para quem não é bom em dar explicações, você explicou muito bem! Tou programando em shellscript aqui para uma simulações que estou fazendo. Mas não sei muito da sintaxe do shellscript. Você me ajudou muito.

Valeu!



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts