ntpdate 110.75.186.247 >> /var/log/ntpdate.log || ntpdate 110.75.186.247 >> /var/log/ntpdate.log || ntpdate 203.123.48.218 >> /var/log/ntpdate.log|| ntpdate 103.16.199.21 >> /var/log/ntpdate.log
我尝试了两种方法,但都没有成功。
ntpdate 110.75.186.247 || ntpdate 110.75.186.247 || ntpdate 203.123.48.218 || ntpdate 103.16.199.21 >> /var/log/ntpdate.log
ntpdate 110.75.186.247 || ntpdate 110.75.186.247 || ntpdate 203.123.48.218 || ntpdate 103.16.199.21 &&>> /var/log/ntpdate.log
如何简化命令?
答案1
使用一个简单的for
构造:
#!/bin/bash
for ip in 110.75.186.247 110.75.186.247 203.123.48.218 103.16.199.21; do
out="$(ntpdate "$ip" 2>/dev/null)" && echo "$out" >>/var/log/ntpdate.log && break
done
或者将 IP 地址保存在数组中:
#!/bin/bash
ips=( 110.75.186.247 110.75.186.247 203.123.48.218 103.16.199.21 )
for ip in "${ips[@]}"; do
out="$(ntpdate "$ip" 2>/dev/null)" && echo "$out" >>/var/log/ntpdate.log && break
done
更简单的是,摆脱中间变量(感谢@kos):
#!/bin/bash
ips=( 110.75.186.247 110.75.186.247 203.123.48.218 103.16.199.21 )
for ip in "${ips[@]}"; do
ntpdate "$ip" 2>/dev/null >>/var/log/ntpdate.log && break
done
答案2
检查该文件是否
.bash_aliases
存在于你的主目录中ls -a ~/.bash_aliases
(如果不存在,请运行你选择的文本编辑器,在我的情况下是这样的nano ~/.bash_aliases
)在该文件中添加以下行:
alias update-time='ntpdate 110.75.186.247 >> /var/log/ntpdate.log || ntpdate 110.75.186.247 >> /var/log/ntpdate.log || ntpdate 203.123.48.218 >> /var/log/ntpdate.log || ntpdate 103.16.199.21 >> /var/log/ntpdate.log'
保存并退出编辑器
现在您只需运行命令即可
update-time
,剩下的就是魔法了:)
答案3
施工问题
ntpdate 192.0.2.1 || ntpdate 203.0.113.2 >> /var/log/ntpdate.log
是>>
仅适用于最后一个命令。您可以通过在命令周围使用括号来解决这个问题,如下所示:
( ntpdate 192.0.2.1 || ntpdate 203.0.113.2 ) >> /var/log/ntpdate.log
您可能认为ntpdate
多次输入是多余的,应该可以消除这种情况。您可以ntpdate
使用循环来消除重复。虽然在您的特定情况下,命令非常简单,但使用循环带来的复杂性比它消除的复杂性还要多:
for IP in 192.0.2.1 203.0.113.2
do
ntpdate "$IP" && break
done >> /var/log/ntpdate.log
或者,也许ntpdate
只需调用一次多个服务器地址就可以更好地解决您的原始问题:
ntpdate 192.0.2.1 203.0.113.2 >> /var/log/ntpdate.log