Я пытаюсь написать сценарий оболочки, который отправляет вывод df -h
по почте с помощью HTML кода, встроенного в сценарий. Проблема в том, что печатаются все шесть столбцов. Мне нужна только определенная последовательность (6,2,3,4,5). Как мне этого добиться? Пробовал много чего, в том числе и массив ), но все равно не получается.
#! /bin/bash
MailTO=xyz@gmail.com
HOST=`hostname`
Numberofdays=2
ALERT_DIR_COUNT=`df -Ph | grep -v "Use%" | sed 's/%//g' | awk '$5 > 70
{print $1,$2,$3,$4,$5"%",$6;}' | column -t | wc -l`
(
printf "To: xyz@gmail.com\n"
printf "Subject:$HOST\n :$ALERT_DIR_COUNT\n mounts reached threshold & Logs
Cleared : $Numberofdays days\n"
printf "Content-Type: text/html\n"
printf "<html>\n
<body>\n"
df -Ph| awk '{ print $6,$2,$3,$4,$5 }''
BEGIN {
print "<table border=\"8\" cellpadding=\"3\" style=\"border-collapse:
collapse\">"
printf "<tr>"
printf "<th bgcolor=turquoise colspan="6">BEFORE_USAGE</th>"
printf "</tr>"
printf "<tr>"
printf "<th bgcolor=gray>MOUNT</th>"
printf "<th bgcolor=gray>SIZE</th>"
printf "<th bgcolor=gray>USED</th>"
printf "<th bgcolor=gray>AVAILABLE</th>"
printf "<th bgcolor=gray>USE%</th>"
printf "</tr>"}
NR>1{
for( i = 1; i <= NF; i++ ) {
printf "%s", "<td bgcolor=azure"
if (i==5&&$i+0>70) printf " bgcolor=azure"
print ">" $i "</td>"
}
print "</tr>"
}
END { print "</table>" }'
Чтобы упростить тело, вы можете использовать что-то вроде этого:
df -Ph | awk -f stat.awk
Я извлек awk-части в awk-скрипт, но этот скрипт можно легко встроить.
Где находится stat.awk:
BEGIN {
print "<html><body><table border=\"8\" cellpadding=\"3\" style=\"border-collapse: collapse\">"
print "<tr>"
print "<th bgcolor=turquoise colspan="6">BEFORE_USAGE</th>"
print "</tr>"
print "<tr>"
print "<th bgcolor=gray>MOUNT</th>"
print "<th bgcolor=gray>SIZE</th>"
print "<th bgcolor=gray>USED</th>"
print "<th bgcolor=gray>AVAILABLE</th>"
print "<th bgcolor=gray>USE%</th>"
print "</tr>"
}
NR > 1 {
bgcolor=""
if ($5+0 > 70) {
bgcolor=" bgcolor=azure"
}
print "<tr><td>"$6"</td><td>"$2"</td><td>"$3"</td><td>"$4"</td><td"bgcolor">"$5"</td></tr>"
}
END {
print "</table></body></html>"
}
Для меня это дает:
<html><body><table border="8" cellpadding="3" style="border-collapse: collapse">
<tr>
<th bgcolor=turquoise colspan=6>BEFORE_USAGE</th>
</tr>
<tr>
<th bgcolor=gray>MOUNT</th>
<th bgcolor=gray>SIZE</th>
<th bgcolor=gray>USED</th>
<th bgcolor=gray>AVAILABLE</th>
<th bgcolor=gray>USE%</th>
</tr>
<tr><td>/</td><td>465Gi</td><td>402Gi</td><td>62Gi</td><td bgcolor=azure>87%</td></tr>
<tr><td>/dev</td><td>339Ki</td><td>339Ki</td><td>0Bi</td><td bgcolor=azure>100%</td></tr>
<tr><td>/Volumes/MobileBackups</td><td>465Gi</td><td>465Gi</td><td>0Bi</td><td bgcolor=azure>100%</td></tr>
<tr><td>/Volumes/Transcend</td><td>120Gi</td><td>62Gi</td><td>57Gi</td><td>53%</td></tr>
<tr><td>/Volumes/LaCie</td><td>3.6Ti</td><td>701Gi</td><td>3.0Ti</td><td>19%</td></tr>
</table></body></html>
Обратите внимание, что это решение не работает, когда имена ваших томов содержат пробелы.