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.


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

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.