2016-03-23 45 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

沒錯。我認爲反引號是故意的和錯誤的。 –