Wie kann ich eine Variable im Skript über das Terminal übergeben, wenn abc.sh ausgeführt wird?

7

Ich möchte zum Zeitpunkt der Ausführung eine Variable im Skript übergeben

Ex: sh abc.sh export id=3

Vinod
quelle

Antworten:

10

Exportierte und in derselben Befehlszeile festgelegte Variablen sind für das Programm sichtbar:

$ cat foo.sh
#!/bin/sh
echo "$foo"

$ foo=bar ./foo.sh
bar

$ export foo=bar
$ ./foo.sh
bar

Aber eine gemeinsame Idiom wäre Befehlszeilenargumente zu verwenden, bekommen sie auf die Positionsparameter eingestellt $1, $2usw.

$ cat arg.sh
#!/bin/sh
echo "$1 and $2"

$ ./arg.sh alpha beta
alpha and beta

Oder verwenden Sie "$@", um alle Befehlszeilenargumente abzurufen, möglicherweise nachdem Sie shifteinige feste Argumente von Anfang an entfernt haben. Für benannte Argumente ist es wahrscheinlich besser, getopt( Manpage ) oder getopts( POSIX , Tutorial in bash-hackers.org ) zu verwenden.

In jedem Fall müsste ein robustes Skript den Fall behandeln, dass einige der Variablen fehlen (nicht gesetzt).

ilkkachu
quelle
Tippfehler im zweiten cat > arg.shSkriptblock : würde arg.sh überschreiben, also muss es sein cat arg.sh. Kann nicht bearbeitet werden, da es weniger als 6 Zeichen sind, müssen Sie tun ...
ChristophS
6

Sie können dies (nur für diese Ausführung) auf folgende Weise tun:

id=3 sh abc.sh 
Romeo Ninov
quelle
4

Vor der Ausführung deklarieren (oder exportieren, hier nicht erforderlich):

id=3 ./myScript.sh

myScript.sh:

#!/bin/bash

echo "id = $id"

Ausgabe:

id = 3
ChristophS
quelle