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

  • 3biblecom

    3biblecom

    23 NİSAN 2011
  • BaaaStuds's channel

    BaaaStuds's

    10 Mart 2009
  • Khan Academy

    Khan Academy

    17 Kasım 2006