私はサーバーから現在のユーザーを検索するためにユーザー入力を受け入れる必要があります。ユーザー入力がオンラインの場合は、ユーザー名を出力する必要があります。ユーザーがログインしていない場合は、それに応じて応答する必要があります。数日間このコードを作業してきましたが、理解できないようです。ユーザーを検索できますが、ユーザー入力変数文字列をログインユーザー名を含む変数文字列と比較すると、パラメータが多すぎるというエラーが発生し続けます。以下の私のコードを参照してください。
#!/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を開いたままにしている場合は、各ttyに対してその名前が1回印刷されます。を使用するには、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