bash betiği satır satır okumak


0

Merhaba, dosyama ihtiyacı olan tüm değişkeni alıp başka bir komut için kullanacak bir komut dosyası oluşturmaya çalışıyorum. Fakat değişkenlerin hafızaya alınmadığı görülüyor, çünkü senaryoyu çalıştırmak yerine printf denedim ve boş çıktılar aldım.

işte benim kodum

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

Ve işte tots.txt içeriği:

görüntü tanımını buraya girin


Ve "değişkenler ezberlenmiyor" derken tam olarak ne demek istiyorsun?
CMD

bu yüzden örneğin awk komutundan sonra "$ regid" printf yazarım bana hiçbir şey vermez.
Peter Hayek

Eh, awkdeğişkenler değişken değildir bash. Sen sonucunu atamak gerekir awkiçin bashdeğişkenler. Ancak awkbu durumda hiç ihtiyacınız yok . Sadece bashözellikleri kullanırdım .
CMD

Ayarlamak için 1) testaka ve 2) ile aşağıdaki pasajı oynayın : istediğiniz yere ulaşırsınız. []statewhile read line; do set $line; echo $1 $2 $3 $4; done
CMD

Yanıtlar:


1

Bunun nedeni değişkenlerinizin, söyleyerek açtığınız alt kabukta ayarlanmalarıdır cat <file> | while .... Yani bu alt kabuk tamamlandığında, bu değişkenlere artık erişemezsiniz.

Bunun yerine, şunu söyleyin:

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

İlginç okuma: Değişkenleri bir boru hattında olan bir döngüde ayarladım. Döngü sona erdikten sonra neden kayboluyorlar? Ya da neden verileri okumamı engelleyemiyorum? .

Ayrıca awkve shelldeğişkenler arasında biraz kafa karışıklığı olduğunu görün . Ayarladığınız awkşey orada kalacaktır, bu nedenle awk '{$var=2}'iki kez yanlış söylemek gerekir : awk içindeki değişkenler, $( $varsütun numarasına atıfta bulunacaktır) olmadan ayarlanır varve daha sonra var sadece awkkabuğunuzda bulunur ve kabuğunuzda bulunmaz.

Belki şöyle bir şey yapmak istersin:

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

Böylece results[]daha sonra erişebileceğiniz bir dizi oluşturabilirsiniz .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.