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

14

Eu gostaria de escrever uma função que eu possa chamar de um script com muitas variáveis ​​diferentes. Por alguns motivos, estou tendo muitos problemas para fazer isso. Os 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 $1e tal na função, mas, em seguida, basta usar a global da qual o script inteiro foi chamado. Basicamente, o que estou procurando é algo parecido $1, $2e assim por diante, mas no contexto local de uma função. Como você sabe, as funções funcionam em qualquer linguagem adequada.

user181822
fonte
Usando $ 1 e $ 2 no seu exemplo, adicione a função "funciona". Tente echo $1e echo $2nele.
Wieland
Meu exemplo foi terrivelmente incompleto, atualizei-o bastante. Agora afaik não funcionará mais.
user181822
Substitua seu result = por result=$(($1 + $2))e adicione echo $resultdepois e ele funciona corretamente, $ 1 e $ 2 são os argumentos das suas funções.
Wieland

Respostas:

18

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

Resultado

./script.sh
 Result is: 3
Rahul
fonte
2
Eu percebo o meu erro agora. Eu tinha usado $ 0 e $ 1 na função e $ 0 resolvido com o nome do script. Eu o confundi com um parâmetro do script e não com a função em si. Obrigado!
user181822
6

No script principal, $ 1, $ 2, está representando as variáveis ​​como você já conhece. Nos subscritos ou funções, $ 1 e $ 2 representarão os parâmetros passados ​​para as funções como variáveis ​​internas (locais) para esses 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
Luciano Andress Martini
fonte