Linux slogan
Visite também: Segurança Linux · BR-Linux.org · Dicas-L · Doode · NoticiasLinux · SoftwareLivre.org · UnderLinux



» Screenshot
Linux: Primeira Screen
Por rodzero
» Login
Login:
Senha:

Se você ainda não possui uma conta, clique aqui.

Esqueci minha senha


Dica

Passagem de parâmetros para funções shell script
Linux user
Publicado por Phillipe Smith em 20/05/2009

Login: Smithux, 272078 pontos | Blog: http://smithux.com
[ Hits: 16812 ]

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

Leitura recomendada
   Dica Linux recomendada Como trocar senhas de usuários dentro de um Shell Script
   Dica Linux recomendada Kernel for Newbies - seu assistente de compilação do Kernel em 10 simples passos
   Dica Linux recomendada Criando certificados no Fedora Core
   Dica Linux recomendada FreeBSD - PF + Altq + MRTG
   Dica Linux recomendada Corrigindo bug do imsniff 0.04 com um simples script (gambiarra)

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


  
Para executar esta ação você precisa estar logado no site, caso contrário, tudo o que for digitado será perdido.
Responsável pelo site: Fábio Berbert de Paula - Conteúdo distribuído sob licença GNU FDL
Site hospedado por:

Viva o Linux

A maior comunidade Linux da América Latina! Artigos, dicas, tutoriais, fórum, scripts e muito mais. Ideal para quem busca auto-ajuda em Linux.