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

이는 이라고 말하여 여는 서브셸에 변수가 설정되기 때문입니다 cat <file> | while .... 따라서 이 서브셸이 완료되면 해당 변수에 더 이상 액세스할 수 없습니다.

대신 다음과 같이 말하세요.

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

흥미로운 독서:파이프라인에 있는 루프에 변수를 설정했습니다. 루프가 종료된 후에 사라지는 이유는 무엇입니까? 아니면 읽을 데이터를 파이프할 수 없는 이유는 무엇입니까?.

awk또한 변수 와 변수 사이에 혼동이 있는 것 같습니다 shell. 설정한 내용은 awk그대로 유지되므로 awk의 변수는 ( 열 번호를 참조함 ) awk '{$var=2}'없이 설정되고 var는 쉘 범위 내에 있으며 쉘에서 사용할 수 없습니다.$$varvarawk

어쩌면 다음과 같은 작업을 수행하고 싶을 수도 있습니다.

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

results[]나중에 액세스할 수 있는 배열을 생성합니다 .

관련 정보