出力は " 13test.sh: line 5: [: Missing `]' "ですが、括弧を追加するとエラーがネストされたifステートメントに渡されます。

出力は " 13test.sh: line 5: [: Missing `]' "ですが、括弧を追加するとエラーがネストされたifステートメントに渡されます。

目的は、ユーザー名の行を取得し、検索した人と一致する場合はwコマンドを発行することです。そうでなければ、その人はオンラインではありません。

read -p "Enter User ID's: " str

for i in [ $str ]; 
do
    if [ who -u | grep -q $i ];
    then
        echo $i
        w -u $i 
    else
        echo $i
        echo user is not logged in
done 

答え1

tl;drのfor id in $str代わりfor i in [ $str ];if who -u | grep -q "$id"代わりに使用してくださいif [ who -u | grep -q $i ];

  • [ … ]中にあるのは条件式、これはコマンドとは異なります。
  • [ … ]いいえ印刷したがって、forループでラップすると、ループには使用されません$str
  • if COMMANDコマンドが成功した場合、何かを実行する正式な方法です。
  • メンテナンス上の理由から、単一文字変数は良くありません™。

関連情報