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