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

有趣的閱讀:我在管道中的循環中設定變數。為什麼循環結束後它們就消失了?或者,為什麼我無法透過管道讀取資料?

awk另請注意,您似乎對和shell變數之間存在一些混淆。無論你設定什麼awk都會保留在那裡,所以說awk '{$var=2}'有兩次不正確:awk 中的變數設定時沒有$$var將引用列號var),然後 var 只是在 shell 的範圍內awk並且在你的 shell 中不可用。

也許你想做類似的事情:

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

這樣您就可以建立一個results[]稍後可以存取的陣列。

相關內容