Shell Scripting: сравнивать что-то ни с чем?

Это действие "выхода" из редактора во временную оболочку часто называют "shell out"

Пример: http://www.tldp.org/LDP/gs/node5.html

1
16.03.2015, 17:20
3 ответа

[…! = ""] сравнивает левый сторону со строкой, содержащей один пробел. […! = ""] сравнивает левую часть с пустой строкой. В программировании оболочки есть странности и подводные камни, но этот конкретный случай очевиден.

'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

См. Также Сценарии оболочки: правильный способ проверки подключения к Интернету?

2
29.04.2021, 00:31

как насчет

 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
1
29.04.2021, 00:31

Между двумя предоставленными вами альтернативами, более поздний правильный:

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 секунды для ответ на пинг.

-1
29.04.2021, 00:31

Теги

Похожие вопросы