Bash Пользовательский ввод Поиск Кто находится на сервере Если Ошибка оператора Слишком много аргументов

Bash Пользовательский ввод Поиск Кто находится на сервере Если Ошибка оператора Слишком много аргументов

Я работаю над заданием, которое требует от меня принимать пользовательский ввод для поиска текущих пользователей на сервере, и если пользовательский ввод находится в сети, мне нужно вывести имя пользователя. Если пользователь не вошел в систему, мне нужно отреагировать соответствующим образом. Я работаю над этим кодом уже несколько дней и, похоже, не могу в нем разобраться. Я могу искать пользователя, но когда дело доходит до сравнения моей переменной пользовательского ввода со строкой переменной, содержащей имя пользователя, который вошел в систему, я постоянно получаю ошибку, в которой говорится, что слишком много аргументов. Пожалуйста, посмотрите мой код ниже:

#!/bin/bash
read -p "Please enter the user name you would like to search: " userName
name=$(who | grep "${userName}" | awk '{print $1}');
if  [ [  $name == *"$userName"* ] ];
then
        echo $name
else
        printf "That user is not logged in.\n";
fi

решение1

Вы близки, но главная проблема в том, что [[ ]]конструкция bash не может иметь пробелов между скобками. Она думает, что вы пытаетесь выполнить несколько [команд, что является командой POSIX test. Если вы исправите это, то это сработает, но если у пользователя открыто несколько tty, то он выведет его имя один раз для каждого. Если вы хотите использовать grep, вы можете сделать это:

#!/bin/bash

read -p "Please enter the user name you would like to search: " userName
if who | awk '{print $1}' | grep -wq "$userName"
then
  echo "$userName is logged in."
else
  echo "That user is not logged in.";
fi

exit

Связанный контент