Это действие "выхода" из редактора во временную оболочку часто называют "shell out"
[…! = ""]
сравнивает левый сторону со строкой, содержащей один пробел. […! = ""]
сравнивает левую часть с пустой строкой. В программировании оболочки есть странности и подводные камни, но этот конкретный случай очевиден.
'ping google.com -c 4 | grep time '
- это буквальная 32-символьная строка. Вы, вероятно, хотели использовать вывод команды, то есть подстановку команды . Вы можете использовать для этого обратные кавычки (вместо используемых вами форвардных кавычек) или долларовые скобки, которые более читабельны и менее подвержены ошибкам в некоторых сложных случаях.В любом случае, вам нужно заключить все в двойные кавычки, иначе результат подстановки команды будет разбит на слова и дальнейшая мерзость .
if [ "$(ping google.com -c 4 | grep time)" != "" ]; then …
Все это довольно окольный, хрупкий способ проверки возможности подключения. Вместо этого используйте статус возврата из ping
.Вероятно, достаточно одного пакета, и вы должны указать довольно небольшой тайм-аут на случай, если сеть не работает. Pinging google.com
проверяет, работают ли и IP-соединение, и DNS. Вы можете выполнить ping 8.8.8.8
, чтобы проверить, работает ли соединение IPv4 (8.8.8.8 - это сервер, запущенный Google).
if ping -q -c 1 -W 1 8.8.8.8 >/dev/null; then
echo "The network is up"
else
echo "The network is down"
fi
См. Также Сценарии оболочки: правильный способ проверки подключения к Интернету?
как насчет
if ping google.com -c 4
then
... OK
else
... not OK
fi
как и большинство unix команд ping даст код возврата, который можно проверить.
Чтобы ответить на оригинальный вопрос, вы не можете напрямую написать пустую строку, вы должны использовать
if [ x'ping google.com -c 4 | grep time' != x ]; then
ping google.com -c 4 | grep time
дать пустую строку x будет равно xМежду двумя предоставленными вами альтернативами, более поздний правильный:
if ['ping google.com -c 4 | grep time '! = ""]; затем
Вы можете сохранить что-то
в переменной, скажем var
, и проверить, пусто ли оно, используя [-z "$ var]"
. Если он пуст, его статус выхода $?
будет нулевым.
Проверка:
$ var="something"
$ [ -z "$var" ]
$ echo $?
1
$ var=""
$ [ -z "$var" ]
$ echo $?
0
Вы можете проверить подключение к Интернету, вы можете использовать следующий один лайнер:
ping -s 1 -c 1 -W 2 -q www.google.com && echo "SUCCESS" || echo "FAILURE"
С -s 1
мы отправим только 1 байт данных.
С помощью -c 1
мы отправим только один пакет ICMP.
С помощью -W 2
мы указываем, что мы будем ждать только 2 секунды для ответ на пинг.