каждая команда после завершения возвращает код возврата.
для 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 $?