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
Как упростить команду?
Используйте простое 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
Проверка, если файл .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
, и отдых является волшебным :)
Проблема с конструкцией
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