Вот способ добиться того, что вы ищете, хотя и не с использованием цикла for
, а с помощью цикла while
:
stat=$(du /home/test/)
echo "$stat" | while read i; do
folder=$(echo "$i" | awk '{print $2}')
echo "mail content" | mail -s $folder kenny@gmail.com
done
Конечно, как уже прокомментировал Archemar, нет причин не направлять вывод du
напрямую в цикл:
du /home/test/ | while read i; do
folder=$(echo "$i" | awk '{print $2}')
echo "mail content" | mail -s $folder kenny@gmail.com
done
Awk
на самом деле тоже не нужен. Сценарий можно упростить таким образом:
du /home/test/ | while read size folder; do
echo "mail content" | mail -s "$folder" kenny@gmail.com
done
Поскольку вы, похоже, не используете размеры каталогов, для вычисления которых предназначен du
, вы можете использовать find
вместо:
find /home/test -type d | while read folder; do
echo "mail content" | mail -s "$folder" kenny@gmail.com
done
Вы можете просто grep
для каждого из кодов ошибок, которые вы хотите сопоставить. Нет необходимости использовать echo
, так как grep
уже выводит совпадающие строки.
grep -E '000090|960|9420|out\[ *002: *\]<ISO9090-9999999902299>' /var/debug/logs/filename
Вы можете использовать *
в качестве имени файла, если хотите искать во всех файлах в папке, а не только в одном.