Bash: "id"出力をprintステートメントに挿入します。

Bash: "id"出力をprintステートメントに挿入します。

私は次の目標を達成しようとしています。 /etc/passwdにbin / bashが設定されているLinuxユーザーを一覧表示し、各ユーザーの情報を次のid [username]印刷ステートメントに追加します。

cat /etc/passwd | grep bin/bash | awk -F\: '{print $1";"$(id $1)}'

(これは明らかに動作しません;))

かなり近づいたような気がします。私が何を逃しているのだろうか?

出力は次のようになります(DavDavの説明を参照)。

User1;uid=1000(User1) gid=1000(User1) groups=1000(User1) 
User2;uid=1001(User2) gid=1001(User2) groups=1001(User2) 
User3;uid=1002(User3) gid=1002(User3) groups=1002(User3) 

答え1

どうですか?

 </etc/passwd grep bin/bash | cut -d: -f1 | xargs -n1 id

答え2

この試み、

 awk -F ':' '/bin\/bash/ {printf ($1";"); system("id "$1)}' /etc/passwd
  • systemコマンドを実行して値を返します。アッ

答え3

別のオプションは次のとおりです。

for i in $(grep /bin/bash /etc/passwd | awk -F: '{ print $1 }'); do
    echo "${i};$(id ${i})"
done

grep ... awk ...含まれている行に対応するユーザー名のリストが生成されます。ループが繰り返されるたびに、これらのユーザー名の1つが生成されます。次に、ユーザー名、セミコロン、そのユーザー名の出力を印刷します。/etc/passwd/bin/bashforiechoid

関連情報