Ich versuche, mehrere Shell-Skripte in einem großen Shell-Skript zusammenzufassen, wie zum Beispiel:
#!/bin/sh
bash script1.sh
bash script2.sh
bash script3.sh
Alle Skripte teilen sich die gleichen Variablen var
und var2
. Ich wollte die Variablendefinitionen aus den einzelnen Shellskripten löschen und stattdessen in das große Shellskript einfügen, damit ich das nur einmal tun muss, wenn ich den Wert der Variablen ändere.
Allerdings, wenn ich es tue
#!/bin/sh
var1="1"
var2="2"
bash script1.sh
bash script2.sh
bash script3.sh
die Variablen werden nicht durch die Referenzen $var1
erkannt und $var2
in den einzelnen Shell-Skripten.
Entschuldigung, falls die Frage schon einmal gestellt wurde, ich bin neu in der Skripterstellung im Allgemeinen und wusste nicht, wonach ich suchen sollte.
Es wäre auch schön zu wissen, wie ich die Skripte mit mehreren variablen Eingaben wie
durchlaufen könntevar1="1 2 3 4 5"
var2="a b c d e"
for i in $var1;do for j in $var2;do
script1.sh
script2.sh
done;done
Akzeptierte Antwort:
Wenn Sie die Skripte 1-3 in Ihrem Hauptskript ausführen, werden sie jeweils in ihrer eigenen Sub-Shell ausgeführt, weshalb sie die in ihrer übergeordneten Shell definierten Variablen nicht erkennen. Verwenden Sie export
um Variablen für Sub-Shells verfügbar zu machen:
#!/bin/sh
export var1="1"
export var2="2"
bash script1.sh
bash script2.sh
bash script3.sh
Eine Alternative (relevant für Ihre zweite Frage) wäre, die Variablen als Positionsparameter an die Skripte zu übergeben:
#!/bin/sh
var1="1"
var2="2"
bash script1.sh "$var1" "$var2"
bash script2.sh "$var1" "$var2"
bash script3.sh "$var1" "$var2"
In den Skripten 1-3 wären diese Variablen dann als $1
verfügbar und $2
bzw..