サーバー上のBashユーザー入力の検索Ifステートメントのエラーパラメーターが多すぎます。

サーバー上のBashユーザー入力の検索Ifステートメントのエラーパラメーターが多すぎます。

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

#!/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

関連情報