我在bash中有一个脚本,每分钟都通过cron执行,如下所示。该脚本声明初始化为true,然后调用initialiseBoot函数,该函数包含while循环,该循环应该不断回显' Initialising'直到initialising = false,这时它应该回应"不初始化"。这应该继续,直到ping成功。在ping成功后再次运行cron作业时,我希望它直接进入"不初始化"但我也不确定如何实现这一目标。这是我到目前为止所拥有的: -
initialising=true
function initialiseBoot {
while true; do
if [ "$initialising" = true ]; then
echo "Initialising"
else
echo "Not initialising"
fi
done
}
# Call initialiseBoot function
initialiseBoot
# If host can ping 8.8.8.8
if [ ping -c 1 8.8.8.8 ]; then
echo "Ping success"
while true; do
echo "Ping failed"
done
else
initialising=false
fi
问题是,即使ping失败,似乎初始化永远不会被设置为false,因此我从未看到" Not initialising",或者至少这是我对它的理解。在任何情况下,我都看不到"没有初始化"即使我回应了ping,所以我知道它是成功的。
答案 0 :(得分:0)
您不能使用shell变量来保持脚本执行之间的状态,它们不会在执行过程中持续存在。而是将状态存储在文件中。
initializing=true
if [ -r /tmp/myscript.initializing ];
initializing=$(</tmp/myscript.initializing)
fi
if [ "$initializing" = true ]
then echo "Initializing"
else echo "Not Initializing"
fi
...
echo "false" > /tmp/myscript.initializing