2016-11-11 74 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