¿Cómo pasar parámetros para funcionar en un script bash?

14

Me gustaría escribir una función a la que pueda llamar desde un script con muchas variables diferentes. Por algunas razones, tengo muchos problemas para hacer esto. Los ejemplos que he leído siempre usan una variable global, pero eso no haría que mi código fuera mucho más legible por lo que puedo ver.

Ejemplo de uso previsto:

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

Intenté usar $1y tal en la función, pero luego solo toma el global desde el que se llamó todo el script. Básicamente, lo que estoy buscando es algo así $1, $2etc., pero en el contexto local de una función. Como sabes, las funciones funcionan en cualquier lenguaje apropiado.

usuario181822
fuente
Usando $ 1 y $ 2 en su ejemplo, la función de agregar "funciona". Prueba echo $1y echo $2en ello.
Wieland
Mi ejemplo fue terriblemente incompleto, lo actualicé un montón. Ahora afaik ya no funcionará.
user181822
Reemplace result = con result=$(($1 + $2))y agregue echo $resultdespués y funciona correctamente, $ 1 y $ 2 son sus argumentos de funciones.
Wieland

Respuestas:

18

Para llamar a una función con argumentos:

function_name "$arg1" "$arg2"

La función se refiere a los argumentos pasados ​​por su posición (no por su nombre), es decir, $ 1, $ 2, etc. $ 0 es el nombre del script en sí.

Ejemplo:

#!/bin/bash

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

add 1 2

Salida

./script.sh
 Result is: 3
Rahul
fuente
2
Me doy cuenta de mi error ahora. Había usado $ 0 y $ 1 en la función y $ 0 resolvió el nombre del script. Lo confundí con un parámetro del script y no con la función en sí. ¡Gracias!
user181822
6

En el script principal $ 1, $ 2, representa las variables como ya sabes. En los subíndices o funciones, $ 1 y $ 2 representarán los parámetros, pasados ​​a las funciones, como variables internas (locales) para estos subíndices.

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