Comment passer des paramètres pour fonctionner dans un script bash?

14

Je voudrais écrire une fonction que je peux appeler à partir d'un script avec de nombreuses variables différentes. Pour certaines raisons, j'ai beaucoup de mal à faire ça. Les exemples que j'ai lus utilisent toujours une variable globale mais cela ne rendrait pas mon code beaucoup plus lisible pour autant que je puisse voir.

Exemple d'utilisation prévue:

#!/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

J'ai essayé d'utiliser $1et tel dans la fonction, mais il suffit ensuite de celui global à partir duquel le script entier a été appelé. Fondamentalement, ce que je recherche est quelque chose comme $1, $2et ainsi de suite, mais dans le contexte local d'une fonction. Comme vous le savez, les fonctions fonctionnent dans n'importe quel langage approprié.

user181822
la source
En utilisant $ 1 et $ 2 dans votre exemple, ajoutez la fonction "fonctionne". Essayez echo $1et echo $2en elle.
Wieland
Mon exemple était horriblement incomplet, je l'ai mis à jour. Maintenant afaik ça ne marchera plus.
user181822
Remplacez votre result = par result=$(($1 + $2))et ajoutez-le echo $resultaprès et cela fonctionne correctement, $ 1 et $ 2 sont vos arguments de fonctions.
Wieland

Réponses:

18

Pour appeler une fonction avec des arguments:

function_name "$arg1" "$arg2"

La fonction fait référence aux arguments passés par leur position (pas par leur nom), c'est-à-dire $ 1, $ 2, etc. $ 0 est le nom du script lui-même.

Exemple:

#!/bin/bash

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

add 1 2

Production

./script.sh
 Result is: 3
Rahul
la source
2
Je réalise maintenant mon erreur. J'avais utilisé $ 0 et $ 1 dans la fonction et $ 0 résolu en effet pour le nom du script. Je l'ai confondu avec un paramètre du script et non la fonction elle-même. Je vous remercie!
user181822
6

Dans le script principal, $ 1, $ 2, représente les variables comme vous le savez déjà. Dans les indices ou les fonctions, les $ 1 et $ 2 représenteront les paramètres, passés aux fonctions, en tant que variables internes (locales) pour ces indices.

#!/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
la source