在bash中重新声明一个变量以调用具有不同结果的函数

时间:2017-05-08 20:42:53

标签: bash

我在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,所以我知道它是成功的。

1 个答案:

答案 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