
私は、サーバー上の現在のユーザーを検索するためにユーザー入力を受け入れる必要がある課題に取り組んでいます。ユーザー入力がオンラインの場合、ユーザー名を出力する必要があります。ユーザーがログインしていない場合は、それに応じて応答する必要があります。このコードに何日も取り組んでいますが、解決方法がわかりません。ユーザーを検索することはできますが、ユーザー入力変数文字列とログインしているユーザー名を保持する変数文字列を比較すると、引数が多すぎるというエラーが繰り返し発生します。以下のコードを参照してください。
#!/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 ごとに名前が 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