Попытка состоит в том, чтобы записать сценарий, который тестирует, чтобы видеть, соединен ли мой vpn. Когда выполнено, сценарий в настоящее время только echos vpn состояние. В конечном счете я хочу, чтобы сценарий сделал намного больше, но на данный момент, я пытаюсь решить, что тестирование укусило, и это управляет мной стена. В каком состоянии VPN находится, сценарий всегда сообщает как "Не Связанный".
Команда, которую я использую для проверки состояния, nordvpn status
но это выкладывает больше строк информации, чем я ищу, таким образом, я grep строка, которая сообщает о ее состоянии соединения. Вот необработанный вывод от nordvpn status
при соединении.
You are connected to NordVPN.
Current server: us1681.nordvpn.com
Your new IP: xxx.xxx.200.1xx
Current protocol: UDP
Transfer: 1.7 MB received, 500.5 KB sent
Это - вывод от nordvpn status
когда я не соединен.
You are not connected to NordVPN.
Вот сценарий:
#!/usr/bin/env bash
NORDSTAT1="$(nordvpn status | grep connected)"
if [ "$NORDSTAT1 = 'You are not connected to NordVPN.'" ]; then
echo Not Connected
else
echo Connected
fi
Если я добавляю строку к сценарию, в котором говорится echo $NORDSTAT1
, это показывает, что состояние соединения правильно хранится в переменной. Кроме того, я подтвердил, что строка, против которой я тестирую, является точным совпадением grep'd строки от nordvpn status
.
Любая справка значительно ценилась бы.
Заключение в кавычки в сценарии является неправильным. Выражение в строке
if [ "$NORDSTAT1 = 'You are not connected to NordVPN.'" ]; then
одна полная строка, которая интерполирована (разрешенная переменная) к
if [ "You are not connected to NordVPN. = 'You are not connected to NordVPN.'" ]; then
Это просто проверяет, непуста ли та строка. Вы хотите
if [ "$NORDSTAT1" = "You are not connected to NordVPN." ]; then
вместо этого протестировать на равенство двух строк.
Тест мог также быть переписан с grep -q
. Это тестирует на существование шаблона без печати. Вместо этого результат может быть определен от grep
код возврата (который является 0
для найденного и !=0
для не найденный). В этом случае тест должен, изменился немного:
#!/usr/bin/env bash
if nordvpn status | grep -q "not connected"; then
echo "Not Connected" # the string "not connected" is contained in the output
else
echo "Connected" # ... is not contained
fi
Я думаю, что это - просто вопрос вкуса в этом случае, все же.