如何在linux下使用shell逐一打印用户列表

我已经开始编写一小段代码来打印所有可用的Linux用户列表。 但是我想把一个接一个的用户传到我的命令中来一起显示每个用户的详细信息。

列出所有用户

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

现在我想通过一个用户在下面的命令来显示每个用户的详细信息。

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

我应该需要用户循环或while循环吗? 任何人可以帮助我build议如何写同样的?

你可以使用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 

我会使用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; ...;}' sh -c '{ command1; command2; ...;}'是由xargs在每个% item上执行的命令; 反过来,命令sh -c允许执行多个shell命令
  • '{echo“User:%”; chage -l%; echo;}'以%为单位回显当前用户,然后在这个用户上运行chage -l ,并用最后的空echo完成输出的格式化