3

Linuxボックスで利用可能なすべてのユーザーのリストを出力する小さなコードを書き始めました。しかし、各ユーザーの詳細をまとめて表示するために、ユーザーを 1 人ずつコマンドに渡したいと考えています。

すべてのユーザーを一覧表示するには

root@bt# getent passwd | grep /home/ | cut -d ':' -f 1

root
san
postgres

ここで、ユーザーごとに 1 つを以下のコマンドに渡して、各ユーザーの詳細をまとめて表示します。

root@bt# chage -l ${user1} ; chage -l ${user2} etcc.

ここで for ループまたは while ループを使用する必要がありますか? 同じものを書く方法を提案するのを手伝ってくれる人はいますか?

4

2 に答える 2

1

whileループを使用できます:

getent passwd | grep /home/ | cut -d ':' -f 1 | \
  while read user ; do
    chage -l "$user"
  done

またはforループ:

for user in $(getent passwd | grep /home/ | cut -d ':' -f 1) ; do
    chage -l "$user"
done

またはxargs:

getent passwd | grep /home/ | cut -d ':' -f 1 | \
  xargs -n1 chage -l
于 2012-09-30T11:07:39.587 に答える
1

xargs前のパイプの各出力項目に対してコマンドを実行するを使用します。

getent passwd | grep /home/ | cut -d ':' -f 1 | sudo xargs -I % sh -c '{ echo "User: %"; chage -l %; echo;}'
  • sudoすべてのユーザーに関する情報を取得するために使用されます。この情報にアクセスできない場合は、削除できますsudo
  • -I %入力項目のプレースホルダーであることを指定するために使用されます%(あなたの場合はユーザー)
  • sh -c '{ command1; command2; ...;}'xargsすべての%アイテムで実行されるコマンドです。次に、このコマンドsh -cにより、複数のシェル コマンドを実行できます。
  • '{ echo "ユーザー: %"; 変更 -l %; echo;}' で現在のユーザーをエコーし​​、このユーザーで%実行chage -lし、最後に空で終了してecho出力をフォーマットします
于 2012-09-30T11:08:00.170 に答える