2013-11-15 3 views
1

Просто ответьте ребятам. Я хотел бы назначить html-теги переменной в BASH. Как мне это сделать?Назначить HTML-теги переменной

Или есть лучший способ сделать это?

Это фактическая часть кода:

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 и ЗЕЛЕНЫЙ в противном случае.

Когда я попытался запустить скрипт, до сих пор не дают мне «Нет такого файла или каталога» ошибка:

+++ 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 

Оценка до последней строки уже правильно, но как же он оценивает значение, как если он выполнен? Я должен оставаться только как ценность, а не команда.

Спасибо,

+0

Лучший способ будет включать в себя не с помощью '' , для одного ... – JJJ

ответ

1

Вам нужно в кавычки переменных заданий, и так как ваши значения имеют двойные кавычки (и никакие другие переменные не ссылаются), я хотел бы использовать одиночные кавычки:

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

Если вам нужно интерпретировать другие переменные в задании, вам нужно использовать двойные кавычки, избегая любых литералов:

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

Вы также должны использовать массивы для «динамически названных» переменных:

STORAGE[$i]="..."

echo "$STORAGE[1]" ...

Чем больше вопрос в том, что вы на самом деле пытаетесь сделать с этим. Почему вы используете тег <font>, почему вы не просто устанавливаете класс CSS как переменную (так как это единственное отличие в HTML) и т. Д.

+0

привет Брайен, я уже пытался не используя кавычки, и я получаю сообщение об ошибке: нет такого файла или каталога – Ravenwolf

+0

я в основном пытаются изменить/обновлять текст в HTML, если выполняется определенное правило/условие. Я должен сделать это для целого ряда мест на странице – Ravenwolf

+0

@ Ravenwolf - если вы получаете это сообщение об ошибке при использовании котировок, убедитесь, что вы используете прямые одинарные кавычки, а не обратные ссылки. Backticks пытаются выполнить содержимое как команды bash. –

1

В сегменте скриптов есть много вещей что это можно сделать «лучше». Вот их выборка.

  1. Не используйте ненужные трубы.awk сделает все, что сделает grep, tail и cut, без запуска дополнительных процессов для каждого шага по трубопроводу.

    TMPSTOR=$(awk -vi="$i" '/DISK/{n=i+1} {n--} n==0 {print;exit}' $HCREPORT1942) 
    
  2. Используйте кавычки вокруг переменных. Вы включили if [ $SETFLAG_1942 = "YES" ];, который находится назад. Вещь, которую вы хотите защитить в кавычках, - это переменная, а не текст, который жестко закодирован в скрипт.

  3. Вы используете динамическое имя переменной. Это Bad Thing, так как обычно требуется использование 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 должен быть улучшен, но это не по теме на этот вопрос.

+0

спасибо ghoti, это здорово. мой сценарий довольно груб в данный момент, так как это делается в спешке. я буду учитывать ваши предложения – Ravenwolf

Смежные вопросы