如何在linux中使用shell逐个打印用户的所有列表并提供完整信息

如何在linux中使用shell逐个打印用户的所有列表并提供完整信息,linux,bash,shell,loops,Linux,Bash,Shell,Loops,我已经开始编写一小段代码来打印linux框中可用的所有用户列表。但我希望将一个用户一个用户传递到我的命令中,以便一起显示每个用户的详细信息 root@bt# chage -l ${user1} ; chage -l ${user2} etcc. 列出所有用户 现在,我想将一个用户一个用户传递到下面的命令,以便一起显示每个用户的详细信息 root@bt# chage -l ${user1} ; chage -l ${user2} etcc. 我需要在这里为循环或while循环用户吗? 有谁能帮

我已经开始编写一小段代码来打印linux框中可用的所有用户列表。但我希望将一个用户一个用户传递到我的命令中,以便一起显示每个用户的详细信息

root@bt# chage -l ${user1} ; chage -l ${user2} etcc.
列出所有用户 现在,我想将一个用户一个用户传递到下面的命令,以便一起显示每个用户的详细信息

root@bt# chage -l ${user1} ; chage -l ${user2} etcc.
我需要在这里为循环或while循环用户吗?
有谁能帮我建议如何编写相同的代码吗?

您可以使用
while
循环:

getent passwd | grep /home/ | cut -d ':' -f 1 | \
  while read user ; do
    chage -l "$user"
  done
for user in $(getent passwd | grep /home/ | cut -d ':' -f 1) ; do
    chage -l "$user"
done
或用于循环的

getent passwd | grep /home/ | cut -d ':' -f 1 | \
  while read user ; do
    chage -l "$user"
  done
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;…;}'
    是由
    xargs
    对每个
    %
    项执行的命令;反过来,命令sh-c允许执行多个shell命令
  • “{echo”User:%;“chage-l%;echo;}”在
    %
    中回显当前用户,然后在此用户上运行
    chage-l
    ,最后使用一个空
    echo
    来格式化输出

非常感谢:-)我想如果我想在每个chage命令之前打印用户名,我们可能需要用户循环而不是xargs,我是正确的??这在没有
for
-循环的情况下是可能的。我编辑了我的答案,以便打印用户。