2016-03-23 26 views
0

我正在处理提示用户输入用户名的脚本。一旦输入,脚本使用'rwho'命令获取登录到网络的用户列表。它应该将他们输入的文本(他们的用户名)与rwho命令的结果进行核对。如何在变量内搜索某段文本?

如果找到匹配项,则会显示一条消息,如果没有,则也会让用户意识到这一点。

这里是脚本,到目前为止,我尝试:

#!/bin/sh 
# 
# User network checking script 
# 

# Using rwho command to get user list 
OUTPUT="$(rwho)" 
echo "${OUTPUT}" 

# Prompt for username 
echo "Please enter your username: " 
read username 

# Input validation 
if [ -z "$username"] 
    then 
    echo "No username supplied" 
    echo "Please enter your username: " 
read username 
fi 

# Search for user 
if `echo ${OUTPUT} | grep "${username}" 1>/dev/null 2>&1' 
then 
    echo "$username is logged in." 
else 
    echo "$username is not present." 
fi 

我始终与搜索用户部分出现错误。我没有Linux的杰出知识,所以如果有人能解决这个问题并帮助我,我会非常感激。

+0

你会得到“错误”吗?也许你应该把它们展示给我们?还要检查你在'grep'管道上缺少结束'\''的语法。也可以使用http://www.shellcheck.net/获取有关代码的一般有用建议。 –

回答

3

您对报价的用法很奇怪。

if echo "$OUTPUT" | grep -q "$username" 

应该工作。

-q使grep安静(并且比您的重定向短)。

+0

因为写入的原始代码运行'echo | grep'管道然后*尝试运行它的输出*作为命令(因为包装反引号)。 –

+0

@EtanReisner:呃,实际上没有关闭反引号,但有一个单引号可能应该是反引号。 – choroba

+0

没错。我认为反引号是故意的和错误的。 –