2

我正在尝试将变量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 变量不会改变?

4

1 回答 1

6

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

建议的修复(带有缩进以提高可读性):

#!/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
于 2013-02-10T01:53:21.093 回答