
Olá, estou tentando criar um script que leia meu arquivo, pegue todas as variáveis necessárias e use-o para outro comando. Mas parece que as variáveis não estão sendo memorizadas, pois tentei um printf em vez de executar meu script e obtive uma saída vazia.
aqui está meu código
#!/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
E aqui está o conteúdo do tots.txt:
Responder1
Isso ocorre porque suas variáveis estão sendo definidas no subshell que você abre dizendo cat <file> | while ...
. Portanto, quando esse subshell estiver concluído, você não poderá mais acessar essas variáveis.
Em vez disso, diga:
while read; do
...
done < tots.txt
Leitura interessante:Defino variáveis em um loop que está em um pipeline. Por que eles desaparecem após o término do loop? Ou por que não consigo canalizar dados para leitura?.
Observe também que você parece ter alguma confusão entre as variáveis awk
e shell
. Tudo o que você definir awk
permanecerá lá, então dizer awk '{$var=2}'
é duas vezes incorreto: as variáveis no awk são definidas sem o $
( $var
se referirá ao número da coluna var
) e então o var está apenas no escopo awk
e não está disponível no seu shell.
Talvez você queira fazer algo como:
results=($(awk 'BEGIN {print 1,2,3,"a"}'))
Para que você crie um array results[]
que poderá acessar posteriormente.