каждая команда после завершения возвращает код возврата.
для if важно не сравнение чего-либо с чем-либо, а именно код возврата команды, который 0 - успех, не ноль - ошибка.
поэтому
if [ A == B ]
- это не сравнение а выполнение команды
[ ]
так и тут
if ping
- это не сравнение, а выполнение команды
ping
и получение ее кода возврата
> /dev/null 2> /dev/null
>
- перенаправление вывода stdout в нул
2>
перенаправление вывода stderr в нул
Это чтобы на экран команда ничего не выводила - ни основной вывод ни ошибки
p.s. посмотреть код возврата можно через переменную $?
ping -c 1 google.com
echo $?
ping -c 1 google.com1
echo $?