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

  • BASS212M

    BASS212M

    15 Temmuz 2009
  • Julia Graf

    Julia Graf

    6 Mayıs 2006
  • The Verge

    The Verge

    8 AĞUSTOS 2006