Проблема со сценарием в Ubuntu

Попытка состоит в том, чтобы записать сценарий, который тестирует, чтобы видеть, соединен ли мой 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.

Любая справка значительно ценилась бы.

1
задан 20 November 2018 в 22:42

1 ответ

Заключение в кавычки в сценарии является неправильным. Выражение в строке

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

Я думаю, что это - просто вопрос вкуса в этом случае, все же.

3
ответ дан 3 December 2019 в 07:22

Другие вопросы по тегам:

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