オンラインで3人の異なるユーザーを検索し、それを印刷するスクリプト

オンラインで3人の異なるユーザーを検索し、それを印刷するスクリプト

ユーザーが 3 つの異なる引数 (ユーザー名) を入力してオンラインかどうかを確認できるスクリプトを作成しようとしています。

私は現在、who | grep "^$1"検索した人を表示する機能を持っていますが、$2と$3を追加しようとすると

who | grep "^$1" "^$2" "^$3"

そのようなファイルまたはディレクトリがないというエラーが表示されますが、引数が 1 つしかない場合は正常に動作します。何か提案はありますか?

答え1

who | grep -e "^$1" -e "^$2" -e "^$3"すべき

答え2

Grepは、使用している正規表現エンジンの種類に応じて動作が異なります。デフォルトでは、基本的な正規表現しかし、拡張正規表現この機能をサポートするバージョン で-Eは、grepPerl互換正規表現-P

BRE は 2 つのパターンのみを検索できます。それ以上は検索できません。構文は次のとおりです。

grep 'pattern1\|pattern2'

ERE と PCRE は任意の数値を検索できます。この点では構文は同じですが、オプション フラグのみが異なります。

grep -E 'pattern1|pattern2|pattern3|patternN'
grep -P 'pattern1|pattern2|pattern3|patternN'

したがって、あなたの場合は次のようなことができます:

who | grep -E "^$1|^$2|^$3"

答え3

次のようなことをお勧めします:

who | awk '{print $1}'

awk は最初の列または現在ログオンしているユーザーの名前を出力します。

terdon が指摘したように、さらに 3 つの議論に絞り込むと次のようになります。

who | awk -v one=$1 -v two=$2 -v three=$3 '$1==one||$1==two||$1==three'

関連情報