bash 脚本逐行读取

bash 脚本逐行读取

您好,我正在尝试创建一个脚本,该脚本读取我的文件,获取所需的所有变量,然后将其用于另一个命令。但似乎变量没有被记住,因为我尝试使用 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

这是因为您的变量是在通过 来打开的子 shell 中设置的cat <file> | while ...。因此,当此子 shell 完成后,您将无法再访问这些变量。

相反,应该说:

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

有趣的阅​​读:我在管道中的循环中设置了变量。为什么循环结束后它们会消失?或者,为什么我无法将数据传输到 read?

awk还要注意,你似乎对和变量有些混淆shell。无论你设置什么,它awk都会保留在那里,所以说awk '{$var=2}'两次都是错误的:awk 中的变量是在没有设置的情况下设置的$$var将引用列号var),然后 var 只是在范围内awk,并且在你的 shell 中不可用。

也许你想做这样的事情:

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

这样您便可以创建一个results[]稍后可以访问的数组。

相关内容