我正在做一项作业,要求我接受用户输入以搜索服务器上的当前用户,如果用户输入在线,我需要输出用户名。如果用户未登录,我需要做出相应的响应。我已经研究这个代码好几天了,但似乎无法弄清楚。我可以搜索用户,但是当将我的用户输入变量字符串与保存登录用户名的变量字符串进行比较时,我不断收到一条错误,提示参数太多。请参阅下面我的代码:
#!/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[[ ]]
构造的括号之间不能有空格。它认为您正在尝试执行多个[
命令,即 POSIXtest
命令。如果你修复它,它就可以工作,但是如果用户打开了多个 tty,则将为每个 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