2016-11-11 4 views
1

bashのforループに関する質問があります。forループの出力を変数に結合する

各cpanelユーザのディレクトリをループしているスクリプトを作成して、特定のファイルを探したいとします。私は、/ homeディレクトリ内の他のフォルダではなく、cpanelユーザのフォルダをループしたいだけです。

この

は私がこれまでに得たものである:私は、私はfor..do..doneループからすべての出力を収集し、1つの変数に格納することができているか理解しない何

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

mail -s "the results" [email protected] $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 

しかし、それdoesntの仕事..任意のアイデア:($ 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はstdinから読み込みます。ループの出力を一時変数なしでパイプすることができます。

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

関連する問題