Como passar parâmetros para funcionar em um script bash?

11

Eu gostaria de escrever uma função que eu possa chamar de um script com muitas variáveis diferentes. Por algumas razões, estou tendo muitos problemas para fazer isso. Exemplos que eu li sempre usam apenas uma variável global, mas isso não tornaria meu código muito mais legível, tanto quanto eu posso ver.

Exemplo de uso pretendido:

#!/bin/bash
#myscript.sh
var1=$1
var2=$2
var3=$3
var4=$4

add(){
result=$para1 + $para2
}

add $var1 $var2
add $var3 $var4
# end of the script

./myscript.sh 1 2 3 4

Eu tentei usar $1 e tal na função, mas é só pegar o global do qual o script inteiro foi chamado. Basicamente, o que eu estou procurando é algo como $1 , $2 e assim por diante, mas no contexto local de uma função. Como você sabe, as funções funcionam em qualquer linguagem adequada.

    
por user181822 27.07.2016 / 20:11

2 respostas

14

Para chamar uma função com argumentos:

function_name "$arg1" "$arg2"

A função refere-se a argumentos passados por sua posição (não pelo nome), ou seja, $ 1, $ 2 e assim por diante. $ 0 é o nome do próprio script.

Exemplo:

#!/bin/bash

add() {
    result=$(($1 + $2))
    echo "Result is: $result"
}

add 1 2

Saída

./script.sh
 Result is: 3
    
por 27.07.2016 / 20:44
3

No script principal $ 1, $ 2, está representando as variáveis como você já sabe. Nos subscritos ou funções, o $ 1 e o $ 2 representarão os parâmetros, passados às funções, como variáveis internas (locais) para estes subscritos.

#!/bin/bash
#myscript.sh
var1=$1
var2=$2
var3=$3
var4=$4

add(){
  #Note the $1 and $2 variables here are not the same of the
  #main script... 
  echo "The first argument to this function is $1"
  echo "The second argument to this function is $2"
  result=$(($1+$2))
  echo $result

}

add $var1 $var2
add $var3 $var4
# end of the script


./myscript.sh 1 2 3 4
    
por 27.07.2016 / 20:45