
我正在做一項作業,要求我接受用戶輸入以搜尋伺服器上的當前用戶,如果用戶輸入在線,我需要輸出用戶名。如果用戶未登錄,我需要做出相應的回應。我已經研究這個代碼好幾天了,但似乎無法弄清楚。我可以搜尋用戶,但是當我的用戶輸入變數字串與儲存登入用戶名的變數字串進行比較時,我不斷收到一條錯誤,提示參數太多。請參閱下面我的程式碼:
#!/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