
Hallo, ich versuche, ein Skript zu erstellen, das meine Datei liest, alle benötigten Variablen nimmt und sie dann für einen anderen Befehl verwendet. Aber es scheint, dass die Variablen nicht gespeichert werden, denn ich habe ein printf versucht, anstatt mein Skript auszuführen, und habe eine leere Ausgabe erhalten.
hier ist mein Code
#!/bin/bash
numparams=$#
params=$*
cat tots.txt | while read;
do awk '{
regid=$1;
uport=$2;
ongoingcalls=$3;
ingeg=$4;
maxcalls=$5;
if($3<$5) state=0
if($3==$5) state=1
if($3>$5) state=2
}'
/home/send_script.sh -o "$regid $uport $ongoingcalls $ingeg $maxcalls $state"
done
Und hier ist der Inhalt von tots.txt:
Antwort1
Dies liegt daran, dass Ihre Variablen in der Subshell festgelegt werden, die Sie mit öffnen cat <file> | while ...
. Wenn diese Subshell also fertig ist, können Sie nicht mehr auf diese Variablen zugreifen.
Sagen Sie stattdessen:
while read; do
...
done < tots.txt
Interessante Lektüre:Ich setze Variablen in einer Schleife, die sich in einer Pipeline befindet. Warum verschwinden sie, wenn die Schleife beendet ist? Oder warum kann ich Daten zum Lesen nicht weiterleiten?.
Beachten Sie auch, dass Sie anscheinend eine gewisse Verwechslung zwischen awk
und shell
Variablen haben. Was auch immer Sie in festlegen, awk
bleibt dort, daher awk '{$var=2}'
ist die Aussage zweimal falsch: Variablen in awk werden ohne das festgelegt $
( $var
bezieht sich auf die Spaltennummer var
) und dann ist die Variable nur im Gültigkeitsbereich von awk
und in Ihrer Shell nicht verfügbar.
Vielleicht möchten Sie etwas tun wie:
results=($(awk 'BEGIN {print 1,2,3,"a"}'))
Damit erstellen Sie ein Array results[]
, auf das Sie später zugreifen können.