如何在linux中使用shell逐个打印用户的所有列表并提供完整信息
我已经开始编写一小段代码来打印linux框中可用的所有用户列表。但我希望将一个用户一个用户传递到我的命令中,以便一起显示每个用户的详细信息如何在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循环用户吗? 有谁能帮
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
-循环的情况下是可能的。我编辑了我的答案,以便打印用户。