2016-11-11 104 views
1

我有一个关于bash中for循环的问题。将for循环的输出组合到变量

我想编写一个脚本,它循环访问每个cpanel用户的目录并查找某个文件。我只想循环访问cPanel用户的文件夹,而不是在/ home目录中的其他文件夹。

这是我走到这一步:

cd /var/cpanel/users 
for user in * 
do 
    find /home/$user -type f -name "*myfile*" 
done 

mail -s "the results" [email protected] $MYOUTPUT 

我不明白什么是,我怎么能收集从for..do..done循环中的所有输出,并将其存储在一个变量,我可以通过电子邮件发送($ MyOutput中)

我想这样做是这样的:

MYOUTPUT = "" 
cd /var/cpanel/users 

for user in * 
do 
    WHAT=$(find /home/$user -type f -name "*myfile*") 
     $MYOUTPUT = $MYOUTPUT$WHAT 
done 


mail -s "result" [email protected] $MYOUTPUT 

但是,这并不工作。任何想法?谢谢!!!

+0

FYI分配不能有周围的空间'='。你必须写'MYOUTPUT =“”'不'MYOUTPUT =“”'。 –

回答

3

首先第一件事情:要分配的东西给一个变量,你必须

  1. =迹象之前,请使用变量名没有$
  2. 没有任何围绕=字符的空格。

那么你需要的是这样的:

for i in {1..10}; do 
    myvar="$myvar $i" 
done 
echo $myvar 

其次,你可以将整个输出只是重定向到一个变量:

myvar=$(for i in {1..10}; do echo $i; done) 
echo $myvar 
4

mail将从标准输入读取。您可以将循环的输出传递给它,而不需要任何临时变量。

for user in * 
do 
    find /home/$user -type f -name "*myfile*" 
done | mail -s "the results" [email protected] 

你甚至可以得到由具有单find命令搜索所有的目录摆脱循环。

find /home/* -type f -name "*myfile*" | mail -s "the results" [email protected] 

实际上,*是没有必要的。

find /home -type f -name "*myfile*" | mail -s "the results" [email protected] 
+0

* ...没有必要。* ...这不完全正确。假设你有一个'/ home/.myfile'文件(这不太可能,但可能),find/home会找到它,但是find/home/*不会。 – user1934428