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

时间:2016-08-30 20:28:45

标签: bash apache shell unix ibmhttpserver

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

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
    <title>My Cool Website</title>
    <META name="description" content="some stupid blurb about this site">
    <META name="keywords" content="a bunch of cool keywords">
        </head>
        <frameset rows="100%,*" border="0">
        <frame src="https://cool-name-24253.herokuapp.com/confirmation" frameborder="0" />
            <frame frameborder="0" noresize />
        </frameset>
        <!-- pageok -->
        <!-- 06 -->
        <!-- -->
    </html>

现在我想在这个while循环中包含一个额外的条件来检查计数器变量的某个值,这样重启服务器的次数仅限于5次。     现在这就是我想要的。

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

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

2 个答案:

答案 0 :(得分:2)

你有几个问题。

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

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

答案 1 :(得分:0)

&#34;定影&#34;当单行&#34; apachectl重启&#34;脚本似乎是徒劳的练习。完成同样的事情。