df -h 명령은 특정 열을 HTML 형식으로 출력합니다.

df -h 명령은 특정 열을 HTML 형식으로 출력합니다.

df -h스크립트에 포함된 HTML 코드를 사용하여 이메일 출력을 보내는 쉘 스크립트를 작성하려고 합니다. 문제는 이것이 6개 열을 모두 인쇄한다는 것입니다. 나는 특정 순서(6,2,3,4,5)만 원합니다. 어떻게 구현할 수 있나요? 배열 배치도 여러 가지 방법으로 시도했지만 여전히 작동하지 않습니다.

#! /bin/bash

[email protected]
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: [email protected]\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>" }'

답변1

본문을 단순화하려면 다음과 같이 사용할 수 있습니다.

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>

볼륨 이름에 공백이 포함되어 있으면 이 해결 방법이 실패합니다.

관련 정보