1321 Stimmen

Übergeben von Parametern an eine Bash-Funktion

Ich versuche herauszufinden, wie man Parameter in einer Bash-Funktion übergibt, aber was immer angezeigt wird, ist, wie man Parameter von der Befehlszeile übergibt.

Ich möchte Parameter innerhalb meines Skripts übergeben. Ich habe es versucht:

myBackupFunction("..", "...", "xx")

function myBackupFunction($directory, $options, $rootPassword) {
     ...
}

Aber die Syntax ist nicht korrekt. Wie kann ich einen Parameter an meine Funktion übergeben?

13voto

Milad P. Punkte 4267

Es nimmt zwei Zahlen vom Benutzer, gibt sie an die Funktion namens add weiter (in der allerletzten Zeile des Codes), und add wird sie addieren und ausgeben.

#!/bin/bash

read -p "Geben Sie den ersten Wert ein: " x
read -p "Geben Sie den zweiten Wert ein: " y

add(){
    arg1=$1 # arg1 wird das erste zugewiesene Argument (beachten Sie, dass es keine Leerzeichen gibt)
    arg2=$2 # arg2 wird das zweite zugewiesene Argument (beachten Sie, dass es keine Leerzeichen gibt)

    echo $(($arg1 + $arg2))
}

add x y # Die Argumente übergeben

10voto

Wil Punkte 697

Ein weiterer Weg, benannte Parameter an Bash zu übergeben... ist die Übergabe per Referenz. Dies wird ab Bash 4.0 unterstützt

#!/bin/bash
function myBackupFunction(){ # directory options destination filename
local directory="$1" options="$2" destination="$3" filename="$4";
  echo "tar cz ${!options} ${!directory} | ssh root@backupserver \"cat > /mnt/${!destination}/${!filename}.tgz\"";
}

declare -A backup=([directory]=".." [options]="..." [destination]="backups" [filename]="backup" );

myBackupFunction backup[directory] backup[options] backup[destination] backup[filename];

Eine alternative Syntax für Bash 4.3 ist die Verwendung eines nameref.

Obwohl der nameref viel bequemer ist, da er nahtlos dereferenziert, liefern einige ältere unterstützte Distributionen immer noch eine ältere Version aus, daher empfehle ich sie noch nicht.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X