как проверить, найден ли вход в каталог или нет, используя pinky (входы есть, а пользователя нет) - PullRequest
2 голосов
/ 05 февраля 2020

я хочу ввести имя пользователя, и если пользователь не может быть найден, имя FNAME не должно быть найдено, но когда я выполнял тестирование, NOTFOUND никогда не обнаруживался, тестер был сделан кем-то другим и не должен иметь проблема.

function fname()
{
#if argument passed canot be found among sessions logged in
result=$(pinky -f "$1")
result_length="${#result}"
#if the result length is not equal to zero means there are some values
elif [ "$result_length" != 0 ]
then
        FNAME="$(pinky -f $1 | awk '{print $2}')"
        return 0
elif [ ! -f "$result" ]
then
        FNAME="NOTFOUND"
        return 0
fi
}

Я пытался проверить результат, но может отображаться только ОШИБКА и имя пользователя, НЕТФОУНД никогда не отображается, даже если я ввел неправильный ввод. потому что $ {# result} никогда не отображает 0? fname Код состояния функции == 1 == Значение FNAME == ОШИБКА == [[[[РАБОТАЕТ - но идентификатор пользователя не найден]]]]


fname nouser Код состояния функции равен = = 0 == Значение FNAME равно ==== [[[[WORKS - идентификатор пользователя найден]]]]


fname zo9 Код состояния функции равен == 0 == Значение FNAME равно == Zo ==

1 Ответ

0 голосов
/ 05 февраля 2020

Ваша проблема в этой строке:

elif [ ! -f "$result" ]

Это буквально означает «иначе, если $result не файл». Так как вы устанавливаете результат на вывод pinky, это явно не то, что вы думаете. Так как вы проверяете, является ли результат переменной пустым или нет в исходном операторе if, все, что вам здесь нужно, это else.

. Также имеется встроенный способ проверки пустой переменной с помощью test ( [). Вы можете проверить с опцией -n. Было бы удобнее использовать это в вашем if блоке так:

if [ -n "$result" ]; then
    # found
else
    # not found
fi

Тогда нет необходимости в переменной result_length.

Кроме того, в этом нет необходимости. повторно запустить мизинец для awk. У вас есть результат pinky, хранящийся в вашей переменной result. Все, что вам нужно сделать, это отправить переменную в awk с помощью строки here. Как то так:

FNAME="$(awk '{print $2}' <<< "$result")"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...