有四个时间服务器,我想将本地时间与ntp时间服务器同步。
arr=(s2c.time.edu.cn s2d.time.edu.cn s2e.time.edu.cn s2f.time.edu.cn)
for var in ${arr[@]};
do
# two lines pseudocode here
if `ntpdate $var` secceed ,exit the for loop
if none of ntp time server can be used,echo "failure"
done
如何将伪代码更改为实际代码?
我用代码解决了这个缺陷:
arr=(s2c.time.edu.cn s2d.time.edu.cn s2e.time.edu.cn s2f.time.edu.cn)
switch = 0
for var in ${arr[@]};
do
# one lines pseudocode here
if `ntpdate $var` secceed ,assign switch = 1 ,exit the for loop
done
if["$switch" = "0"] ;then
echo "synchronize local time with ntpdate failure"
fi
如何将if
ntpdate $ var secceed ,assign switch = 1 ,exit the for loop
更改为真正的bash脚本?
答案 0 :(得分:1)
您提出的算法有一个明显的缺陷:
- 循环服务器
- 如果可以使用ntp服务器 - >退出循环
- 如果没有ntp服务器可以使用 - >回声失败
缺陷是最后一步,“如果没有ntp服务器......”。 将它放在循环中是没有意义的, 因为在完成循环之前你无法判断它。
请考虑一下:
实现:
use_any_ntp_server() {
for server; do
ntpdate $server && return
done
return 1
}
if ! use_any_server s2c.time.edu.cn s2d.time.edu.cn s2e.time.edu.cn s2f.time.edu.cn; then
echo failure: none of the ntp servers could be used
fi