Cassic

Passando valores de variáveis como parâmetro

Autor: Bruno Lopes


  Se você já pensou: "Poxa, cansei de sempre usar um READ para armazenar um valor em uma variável. Poderia haver um jeito mais rápido de pegar alguns valores...". Para sua felicidade isso existe!

  Imagine que queira fazer um script que retorne a área de um quadrado. E para isso ser mais prático mandar o valor da base junto do comando para executar o script. Vamos ver tudo com calma, que você entende já. Crie um script chamado "quadrado.sh" com o conteúdo:

quadrado.sh
echo "A área desse quadrado é: $(($1**2))"

  Agora em vez de chamar o script usando "./quadrado.sh" chame-o usando "./quadrado.sh valor_da_base". Exemplo:

  ./quadrado 5

  O script retornará:

  A área desse quadrado é: 25

  O valor digitado após "./quadrado.sh" é guardado na variável $1. Em seguida é feito o cálculo da área com esse valor. O Shell armazena informações que são passadas ao carregar o script em variáveis especiais. São elas:

Variáveis especiais usadas pelo shell:
$0
Armazena o Próprio Comando chamado no terminal
$1
Armazena o Primeiro Parâmetro chamado no terminal
$2
Armazena o Segundo Parâmetro chamado no terminal
${10}
Armazena o Décimo Parâmetro chamado no terminal
$#
Armazena o número total de parâmetros chamado no terminal
$*
Armazena o todos parâmetros numa única variável

  Repare que para chamar do Décimo Parâmetro em diante é necessário usar { }. Vejamos um exemplo. Suponha que você passe o comando:

  ./variaveis 1 2 3 4 5 6 7 8 9 a b

  Se em seu script tiver um: echo "$10"? O script retornará: 10. Por que isso acontece? O shell interpreta que você quer imprimir o valor de "$1" (que no exemplo é 1) e ao lado desse valor imprimir um 0.

  Se você deseja imprimir o parâmetro número 10 deve colocar "${10}", então o script imprimirá "a" que é o valor que entramos para o décimo parâmetro.

  Aplicação Prática:

  Imagine agora que queira criar um script que dá o perímetro de um retângulo. O ideal é verificar se o usuário passou 2 valores pelo terminal, 1 para base e 1 para a altura desse retângulo. Como fazer para saber se o usuário digitou esses dois valores? Simples vamos usar o "$#" ele retorna quantos valores o usuário digitou no terminal. Veja o script:

perimetro_ret.sh
base="$1"
altura="$2"
numero="$#"
if [ $numero -ne 2 ]
then
     echo "Eu preciso de dois valores calcular o perímetro do retângulo"
else
     echo "O perímetro desse retângulo é: $((($base + $altura) * 2))"
fi