script bash leído línea por línea

script bash leído línea por línea

Hola, estoy intentando crear un script que lea mi archivo, tome todas las variables que necesita y luego las use para otro comando. Pero parece que las variables no se memorizan, porque probé printf en lugar de ejecutar mi script y obtuve un resultado vacío.

aquí está mi 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

Y aquí está el contenido de tots.txt:

ingrese la descripción de la imagen aquí

Respuesta1

Esto se debe a que sus variables se configuran en el subshell que abre diciendo cat <file> | while .... Entonces, cuando finalice esta subcapa, ya no podrá acceder a esas variables.

En lugar de eso, diga:

while read; do
    ...
done < tots.txt

Lectura interesante:Configuré variables en un bucle que está en una tubería. ¿Por qué desaparecen una vez finalizado el ciclo? O, ¿por qué no puedo canalizar datos para leer?.

Tenga en cuenta también que parece tener cierta confusión entre las variables awky shell. Lo que sea que establezca awkpermanecerá allí, por lo que decirlo awk '{$var=2}'es dos veces incorrecto: las variables en awk se configuran sin $( $varse referirá al número de columna var) y luego la var está solo en el alcance de awky no está disponible en su Shell.

Quizás quieras hacer algo como:

results=($(awk 'BEGIN {print 1,2,3,"a"}'))

Para que cree una matriz results[]a la que pueda acceder más adelante.

información relacionada