在 shell 脚本中的 while 循环中使用额外条件

Use an extra condition within my while loop in shell script

我们经常使用 udeploy 进行部署,我们有一个 shell 脚本来重启 apache http 服务器作为最后一个任务。脚本很简单:-

cd bin_path
sudo ./apachectl -k stop
sleep 5
sudo ./apachectl start
while [ $? -ne 0 ]
do 
    sudo ./apachectl start
    sleep 1
done

现在我想在此 while 循环中包含一个额外的条件,用于检查计数器变量的特定值,以便将重新启动服务器的尝试限制为仅说 5 次。 这就是我想要的。

var = 0
sudo ./apachectl start
while [ $? -ne 0 -o $var lte 5 ]
do
    var = $((var+1))
    sudo ./apachectl start
    sleep 1
done

但不知为何我不是 shell 脚本语法方面的专家。 如果有人可以帮助我更正脚本以实现所需的解决方案。

你有几个问题。

  1. Shell 变量赋值在 =.
  2. 两边没有空格
  3. 您的 while 循环正在测试 sleep 的状态,而不是 sudo
  4. 当您应该使用 and 来组合条件时,您却使用了 or
  5. test 中的比较需要 - 前缀。

正确的脚本应该是:

var=0
while ! sudo ./apachectl start && [ $var -le 5 ]
do
    var=$((var+1))
    sleep 1
done

"Fixing" 当一行 "apachectl restart" 完成同样的事情时,脚本似乎是徒劳的练习。