Wie übergebe ich Parameter, um in einem Bash-Skript zu funktionieren?

14

Ich möchte eine Funktion schreiben, die ich aus einem Skript mit vielen verschiedenen Variablen aufrufen kann. Aus einigen Gründen habe ich große Probleme damit. Beispiele, die ich gelesen habe, verwenden immer nur eine globale Variable, aber das würde meinen Code nicht so gut lesbar machen, wie ich es sehe.

Verwendungszweck Beispiel:

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

Ich habe versucht, $1und so in der Funktion zu verwenden, aber dann wird nur die globale verwendet, von der aus das gesamte Skript aufgerufen wurde. Grundsätzlich suche ich etwas wie $1, $2und so weiter, aber im lokalen Kontext einer Funktion. Wie Sie wissen, funktionieren Funktionen in jeder geeigneten Sprache.

user181822
quelle
Verwenden Sie in Ihrem Beispiel $ 1 und $ 2 und fügen Sie die Funktion "works" hinzu. Probieren Sie echo $1und echo $2drin.
Wieland
Mein Beispiel war schrecklich unvollständig, ich habe es ein paar Mal aktualisiert. Jetzt wird es leider nicht mehr funktionieren.
User181822
Ersetzen Sie Ihr result = mit result=$(($1 + $2))und fügen echo $resultSie es danach hinzu, und es funktioniert ordnungsgemäß. $ 1 und $ 2 sind Ihre Funktionsargumente.
Wieland

Antworten:

18

So rufen Sie eine Funktion mit Argumenten auf:

function_name "$arg1" "$arg2"

Die Funktion verweist auf übergebene Argumente anhand ihrer Position (nicht anhand ihres Namens), dh $ 1, $ 2 usw. $ 0 ist der Name des Skripts.

Beispiel:

#!/bin/bash

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

add 1 2

Ausgabe

./script.sh
 Result is: 3
Rahul
quelle
2
Ich erkenne jetzt meinen Fehler. Ich hatte $ 0 und $ 1 in der Funktion verwendet und $ 0 tatsächlich in den Skriptnamen aufgelöst. Ich habe es für einen Parameter des Skripts und nicht für die Funktion selbst gehalten. Vielen Dank!
User181822
6

Im Hauptskript repräsentiert $ 1, $ 2, die Variablen, wie Sie bereits wissen. In den Indizes oder Funktionen stellen $ 1 und $ 2 die an die Funktionen übergebenen Parameter als interne (lokale) Variablen für diese Indizes dar.

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