如何将伪代码更改为实际代码?

时间:2015-10-10 13:43:54

标签: bash

有四个时间服务器,我想将本地时间与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脚本?

1 个答案:

答案 0 :(得分:1)

您提出的算法有一个明显的缺陷:

  
      
  • 循环服务器      
        
    • 如果可以使用ntp服务器 - >退出循环
    •   
    • 如果没有ntp服务器可以使用 - >回声失败
    •   
  •   

缺陷是最后一步,“如果没有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