Bash不会改变变量值

时间:2013-02-10 01:47:54

标签: bash

我正在尝试将变量reload0更改为1,如下面的代码所示:

for d in /home/*; do
  u="${d##*/}";
  reload=0;
  echo "Checking $u";
  if [ -e /home/$u/info/reload.php ]; then
    echo "FOUND!";
    reload=1;
  fi
done
echo $reload;
if [ $reload = 1 ]; then
  service apache2 reload
fi

问题是它没有被更改,$reload仍为0,输出类似于此(apache不会重新加载):

Checking user1
FOUND!
Checking user2
0 #< this should be 1 not 0 :(

为什么我的bash变量不会改变?

1 个答案:

答案 0 :(得分:6)

您正在为每个用户重置reload。如果找不到最后一个用户的文件,退出循环时reload将为0

建议的修复(为了便于阅读而使用缩进):

#!/usr/bin/env bash

reload=0
for d in /home/*; do
    u="${d##*/}"
    echo "Checking $u";
    if [ -e /home/$u/info/reload.php ]; then
        echo "FOUND!"
        reload=1
    fi
done
echo $reload
if [ $reload -eq 1 ]; then
    service apache2 reload
fi