问题描述
我正在尝试在 bash 中遍历 awk 命令的输出。我将输出保存到一个变量中,当我循环时,所有输出都保存为一个长字符串,而不是每个输出都有自己的单独索引。我如何才能使用每个单独的字符串?还有其他建议吗?谢谢!
variable=`awk -F '$3 > 1000 { print $1 }' < /etc/password | grep -v 'person1\|person2'`
for x in "{$variable[@]}";do
chage -M 60 "$x"
解决方法
表面上,目标是在 uid > 1000 的任何用户上运行 chage ...
,不包括两个预定义用户(person1、person2)。对循环的小修复应该可以解决问题。
修复了两个小问题:awk 使用“:”作为字段分隔符,bash 循环迭代一个简单的变量(而不是数组)。解决方案将用户过滤器集成到 awk 脚本中,消除了单独的 grep
:
user_list=`awk -F: '$3 > 1000 && $1 !~ "$(person1|person2)$" { print $1 }' < /etc/password`
for x in $user_list ; do
chage -M 60 "$x"
done