web-dev-qa-db-fra.com

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

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 $1 et ainsi de suite dans la fonction, mais il suffit ensuite de celui global à partir duquel le script entier a été appelé. Fondamentalement, ce que je recherche, c'est quelque chose comme $1, $2 et ainsi de suite mais dans le contexte local d'une fonction. Comme vous le savez, les fonctions fonctionnent dans n'importe quel langage approprié.

14
user181822

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
18
Rahul

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
6