首页 > 解决方案 > 循环但输出被引用的行

问题描述

如果该帐户有任何人分配了 sendAs 权限,我有我编写的脚本来遍历电子邮件帐户并输出。

#!/bin/bash

while IFS= read -r line
do
     zmprov -l ga "$line" | grep zimbraACE >> accountsout.txt

done < accounts.txt

该脚本有效但输出但输出不能帮助我确定每个条目或条目集属于哪些帐户。

zimbraACE: 12bf9714-9c6d-46ce-b15d-c127bfffae usr viewFreeBusy
zimbraACE: 00000000-0000-0000-0000-0000000000 all viewFreeBusy
zimbraACE: 00000000-0000-0000-0000-0000000000 all viewFreeBusy
zimbraACE: 00000000-0000-0000-0000-0000000000 all -viewFreeBusy
zimbraACE: 538c5495-8e50-43cb-9131-e893695bd5 usr sendAs
zimbraACE: 23beb905-67c0-4e0d-9e85-405de5babd usr sendAs

我希望让它在属性 a la 之前输出行引用:

zimbrasucks@imbra.org
zimbraACE: 12bf9714-9c6d-46ce-b15d-c127bfffae usr viewFreeBusy
zimbraACE: 00000000-0000-0000-0000-0000000000 all viewFreeBusy
zimbraACE: 00000000-0000-0000-0000-0000000000 all viewFreeBusy
zimbraACE: 00000000-0000-0000-0000-0000000000 all -viewFreeBusy
dontusethisproduct@zimbra.org
zimbraACE: 538c5495-8e50-43cb-9131-e893695bd5 usr sendAs
zimbraACE: 23beb905-67c0-4e0d-9e85-405de5babd usr sendAs

我知道我必须将每次迭代的输出作为第二个变量捕获,然后在每个循环中输出这两个变量,但我什至不确定从 bash 开始的位置。

标签: bashloopsvariableswhile-loop

解决方案


将输出保存grep在变量中。然后检查是否grep成功,并在打印变量之前打印电子邮件。

while IFS= read -r line
do
    temp=$(zmprov -l ga "$line" | grep zimbraACE)
    if [ $? -eq 0 ]
    then
        echo "$line"
        echo "$temp"
    fi
done < accounts.txt > accountsout.txt

推荐阅读