在 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 脚本语法方面的专家。
如果有人可以帮助我更正脚本以实现所需的解决方案。
你有几个问题。
- Shell 变量赋值在
=
. 两边没有空格
- 您的
while
循环正在测试 sleep
的状态,而不是 sudo
。
- 当您应该使用
and
来组合条件时,您却使用了 or
。
test
中的比较需要 -
前缀。
正确的脚本应该是:
var=0
while ! sudo ./apachectl start && [ $var -le 5 ]
do
var=$((var+1))
sleep 1
done
"Fixing" 当一行 "apachectl restart" 完成同样的事情时,脚本似乎是徒劳的练习。
我们经常使用 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 脚本语法方面的专家。 如果有人可以帮助我更正脚本以实现所需的解决方案。
你有几个问题。
- Shell 变量赋值在
=
. 两边没有空格
- 您的
while
循环正在测试sleep
的状态,而不是sudo
。 - 当您应该使用
and
来组合条件时,您却使用了or
。 test
中的比较需要-
前缀。
正确的脚本应该是:
var=0
while ! sudo ./apachectl start && [ $var -le 5 ]
do
var=$((var+1))
sleep 1
done
"Fixing" 当一行 "apachectl restart" 完成同样的事情时,脚本似乎是徒劳的练习。