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

  • B4ROK

    B4ROK

    1 EKİM 2008
  • kindlechatmail

    kindlechatma

    25 AĞUSTOS 2010
  • TechBalance

    TechBalance

    12 HAZİRAN 2011