【发布时间】:2012-05-17 23:03:44
【问题描述】:
我有以下简单的脚本,我正在运行一个循环并希望维护一个COUNTER。我无法弄清楚为什么计数器没有更新。是因为创建了子shell吗?我该如何解决这个问题?
#!/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
【问题讨论】:
-
您不需要将while循环放入子shell。只需删除 while 循环周围的括号,就足够了。或者如果你必须把它循环到子shell中,那么在完成后,将计数器转储到临时文件中,然后在子shell之外恢复这个文件。我会准备最后的程序给你答复。
标签: linux bash shell scripting counter