将HTML标记分配给变量

时间:2013-11-15 17:48:49

标签: html bash

只是一个快速问题的人。我想将html标签分配给BASH中的变量。我该怎么做?

或者有更好的方法吗?

这是代码的实际部分:

function storage_util_1942
{
  if [ $SETFLAG_1942 = "YES" ];
  then

  for i in {1..5}
  do
  TMPSTOR=$(cat $HCREPORT1942 | grep -A$i DISK | tail -1)
  RULESET=$(cat $HCREPORT1942 | grep -A$i DISK | tail -1 | awk '{print $6}' | cut -d'%' -f1)

  if [ $RULESET -gt 90 ]
  then
    STORAGE$i="<font color=\"red\"><b>${TMPSTOR}</b></font>"
  else
    STORAGE$i="<font color=\"green\"><b>${TMPSTOR}</b></font>"
  fi
  done

fi

echo "  <tr align="left">"
echo "    <td><font face="verdana,helvetica" size="1" color="red"><b>Storage Capacity <font color="green">[Must be less than 90%]</b></font></td>"
echo "  </tr>"
echo "  <tr align="left" bgcolor="white" height="80">"
echo "    <td><font face="courier new" size="1" color="black">"
echo "      <br>"
echo "      <pre>"
echo "       $STORAGE1"
echo "       $STORAGE2"
echo "       $STORAGE3"
echo "       $STORAGE4"
echo "       $STORAGE5"
echo "      </pre></font>"
echo "    </td>"
echo "  </tr>"

}

这是我正在创建的HTML基础报告的一部分。目标是根据上面设置的条件显示$ STORAGE(#)的值。如果它高于90则为RED,否则为GREEN。

当我尝试运行脚本时,它仍然给我“没有这样的文件或目录”错误:

+++ storage_util_1942
+++ '[' YES = YES ']'
+++ for i in '{1..5}'
++++ cat /apps/data/support_bin/monitoring/healthcheck/healthcheck.report
++++ grep -A1 DISK
++++ tail -1
+++ TMPSTOR='/dev/mapper/rootdg-rootdgvol2   ext3   1.9G  1.7G  133M   93%   /var'
++++ cat /apps/data/support_bin/monitoring/healthcheck/czchols1942.healthcheck.report
++++ grep -A1 DISK
++++ tail -1
++++ awk '{print $6}'
++++ cut -d% -f1
+++ RULESET=93
+++ '[' 93 -gt 90 ']'
+++ 'STORAGE1=<font color="red"><b>/dev/mapper/rootdg-rootdgvol2   ext3   1.9G  1.7G  133M   93%   /var</b></font>'

./script.sh: line 166: STORAGE1=<font color="red"><b>/dev/mapper/rootdg-rootdgvol2   ext3   1.9G  1.7G  133M   93%   /var</b></font>: No such file or directory

最后一行之前的评估已经是正确的,但是如何评估该值就像执行它一样?我应该只留下一个价值而不是一个命令。

谢谢,

2 个答案:

答案 0 :(得分:1)

你需要围绕变量赋值的引号,并且由于你的值有双引号(并且没有引用其他变量),我会使用单引号:

var='<font color="red">HELLO WORLD</font>'

如果你需要解释赋值中的其他变量,你需要使用双引号,转义任何文字:

var="<font color=\"red\">${TMPSTOR}</font>"

您还需要为“动态命名”变量使用数组:

STORAGE[$i]="..."

echo "$STORAGE[1]" ...

更大的问题是你真正想要做的事情。为什么使用<font>标签,为什么不只是将CSS类设置为变量(因为这是HTML中唯一的区别)等等。

答案 1 :(得分:1)

您发布的脚本片段中有很多内容可以通过“更好的方式”完成。以下是他们的样本。

  1. 不要使用不必要的管道。 awk将执行greptailcut将执行的所有操作通过管道为每个步骤启动额外的流程。

    TMPSTOR=$(awk -vi="$i" '/DISK/{n=i+1} {n--} n==0 {print;exit}' $HCREPORT1942)
    
  2. 在变量周围使用引号。您已经包含了向后的if [ $SETFLAG_1942 = "YES" ];。您要在引号中保护的是变量,而不是硬编码到脚本中的文本。

  3. 您正在使用动态变量命名。这是一件坏事,因为它通常需要使用eval,这是邪恶的。

    eval STORAGE$i="'<font color=\"red\"><b>\${TMPSTOR}</b></font>'"
    

    因此,使用数组而不是STORAGE$i=...

    declare -a STORAGE
    if [ -n "${RULESET//[0-9]/}" ]; then
      # RULESET contains non-digts, which it should not.
      echo "ERROR: invalid data, please investigate." >&2
      exit 1
    elif [ "$RULESET" -gt 90 ]; then
      STORAGE[$i]="<span class='warn'>${TMPSTOR}</span>"
    else
      STORAGE[$i]="<span class='good'>${TMPSTOR}</span>"
    fi
    

    然后用以下内容遍历数组:

    for item in ${STORAGE[@]}; do
      echo "$item"
    done
    
  4. 最后,您的HTML需要改进,但这个问题不在此。