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


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).


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 

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
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.