SORU
9 Mayıs 2012, ÇARŞAMBA


Bash döngü içinde artış çalışmıyor sayacı

Bir döngü çalıştırıyorum aşağıdaki basit komut dosyası var ve COUNTER korumak istiyorum. Sayaç güncelleme değil neden anlamaya kuramıyorum. Thats oluşturulan almak koşullardan dolayı mı? Nasıl potansiyel olarak bunu düzeltebilir miyim?

#!/bin/bash

WFY_PATH=/var/log/nginx
WFY_FILE=error.log
COUNTER=0
grep 'GET /log_' $WFY_PATH/$WFY_FILE | grep 'upstream timed out' | awk -F ', ' '{print $2,$4,$0}' | awk '{print "http://domain.com"$5"&ip="$2"&date="$7"&time="$8"&end=1"}' | awk -F '&end=1' '{print $1"&end=1"}' |
(
while read WFY_URL
do
    echo $WFY_URL #Some more action
    COUNTER=$((COUNTER 1))
done
)

echo $COUNTER # output = 0

CEVAP
9 Mayıs 2012, ÇARŞAMBA


İlk olarak, sayaç artıyor. COUNTER=$((COUNTER 1)) COUNTER=$[COUNTER 1] COUNTER=$((COUNTER)) değişen artacak.

İkinci olarak, tahmin olarak geri-yay aranan değişkenleri bölgeler için yanıltıcıdır. Bir kabuk değişkenleri bölgeler dışında kullanılamaz. Bu değişkenler alt işlem için yerel.

Bunu çözmenin bir yolu ara değeri depolamak için bir geçici dosya kullanarak

TEMPFILE=/tmp/$$.tmp
echo 0 > $TEMPFILE

# Loop goes here
  # Fetch the value and increase it
  COUNTER=$[$(cat $TEMPFILE)   1]

  # Store the new value
  echo $COUNTER > $TEMPFILE

# Loop done, script done, delete the file
unlink $TEMPFILE

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • FF Radio

    FF Radio

    16 Mayıs 2008
  • Hidden Wolf TV

    Hidden Wolf

    1 EKİM 2009
  • Samvith V Rao

    Samvith V Ra

    20 EKİM 2006