我对bash中的for循环有疑问。
我想编写一个循环遍历每个cpanel用户目录并查找某个文件的脚本。我只想循环遍历cpanel用户的文件夹而不是/ home目录中的其他文件夹。
这是我到目前为止所得到的:
cd /var/cpanel/users
for user in *
do
find /home/$user -type f -name "*myfile*"
done
mail -s "the results" my@email.com $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" my@email.com $MYOUTPUT
但那不起作用..任何想法?谢谢!!!
答案 0 :(得分:4)
mail
将从标准输入读取。您可以将循环的输出传递给它而不需要任何临时变量。
for user in *
do
find /home/$user -type f -name "*myfile*"
done | mail -s "the results" my@email.com
你甚至可以通过一个find
命令搜索所有目录来摆脱循环。
find /home/* -type f -name "*myfile*" | mail -s "the results" my@email.com
实际上,*
并非必要。
find /home -type f -name "*myfile*" | mail -s "the results" my@email.com
答案 1 :(得分:3)
首先要做的事情是:要为变量赋值,你必须
$
符号之前使用不带=
的变量名称。=
字符周围没有任何空格。所以你需要的是这样的:
for i in {1..10}; do
myvar="$myvar $i"
done
echo $myvar
其次,您可以将整个输出重定向到变量:
myvar=$(for i in {1..10}; do echo $i; done)
echo $myvar