Здравствуйте, я пытаюсь создать скрипт, который читает мой файл, принимает все необходимые ему переменные, а затем использует его для другой команды. Но кажется, что переменные не запоминаются, потому что я пробовал printf вместо запуска своего скрипта и получил пустой вывод.

вот мой код

#!/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

А вот содержимое tots.txt:

1 ответ1

1

Это потому, что ваши переменные устанавливаются в подоболочке, которую вы открываете, говоря cat <file> | while ... Таким образом, когда этот подоболочек завершен, вы больше не можете получить доступ к этим переменным.

Вместо этого скажите:

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

Интересное чтение: я устанавливаю переменные в цикле, который находится в конвейере.Почему они исчезают после завершения цикла? Или почему я не могу передать данные для чтения? ,

Также обратите внимание, что вы, кажется, имеете некоторую путаницу между переменными awk и shell . Все, что вы установили в awk , останется там, поэтому выражение awk '{$var=2}' неверно в два раза: переменные в awk устанавливаются без $ ($var будет ссылаться на номер столбца var), а затем переменная просто в объеме awk и не доступно в вашей оболочке.

Может быть, вы хотите сделать что-то вроде:

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

Так что вы создаете массив results[] которому позже сможете обращаться.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .