我使用sh(1)外壳脚本来生成日、周、月和年的RRDTool。我的问题是,如何在不重复相同代码的情况下使此代码更有效?我试着这样做,但总是得到错误,使用尾随转义字符等:
NEWVAR="-a PNG -v "Interrupts/s" -h 130 -w 576 \
--watermark "`hostname`:`date "+%H:%M:%S - %d/%m/%Y"`" --font TITLE:15: \
--font LEGEND:7: --font UNIT:7: --font AXIS:5: -c CANVAS#000000 -c BACK#D8D8D8 \
DEF:DI="$RRDFDI":DI:AVERAGE \
CDEF:DIx=DI,8000,LT,DI,UNKN,IF \
AREA:DIx#FFDD44:"" \
LINE1.2:DIx#31B404:"Device Interrupts" \
GPRINT:DIx:MIN:"Min\:%6.0lf" \
GPRINT:DIx:AVERAGE:"Avg\:%6.0lf" \
GPRINT:DIx:MAX:"Max\:%6.0lf" \
GPRINT:DIx:LAST:"Cur\:%6.0lf\l""
$RRDBIN graph $NEWVAR -t "Device Interrupts Days Statistic (Interrupts)" --start -1d
$RRDBIN graph $NEWVAR -t "Device Interrupts Weeks Statistic (Interrupts)" --start -1w
$RRDBIN graph $NEWVAR -t "Device Interrupts Months Statistic (Interrupts)" --start -1m
$RRDBIN graph $NEWVAR -t "Device Interrupts Years Statistic (Interrupts)" --start -1y 提前感谢!
发布于 2014-02-15 17:52:57
使用for循环,类似于下面的内容。
NEWVAR="-a PNG -v "Interrupts/s" -h 130 -w 576 \
--watermark "`hostname`:`date "+%H:%M:%S - %d/%m/%Y"`" --font TITLE:15: \
--font LEGEND:7: --font UNIT:7: --font AXIS:5: -c CANVAS#000000 -c BACK#D8D8D8 \
DEF:DI="$RRDFDI":DI:AVERAGE \
CDEF:DIx=DI,8000,LT,DI,UNKN,IF \
AREA:DIx#FFDD44:"" \
LINE1.2:DIx#31B404:"Device Interrupts" \
GPRINT:DIx:MIN:"Min\:%6.0lf" \
GPRINT:DIx:AVERAGE:"Avg\:%6.0lf" \
GPRINT:DIx:MAX:"Max\:%6.0lf" \
GPRINT:DIx:LAST:"Cur\:%6.0lf\l""
for c in d w m y ; do
$RRDBIN graph $NEWVAR -t "Device Interrupts Days Statistic (Interrupts)" --start -1$c output.file.$c
done发布于 2014-02-16 12:38:07
在使用此代码时,出现错误的最明显原因是未能转义NEWVAR声明中嵌入的双引号。
您不能同时生成所有三个图;您编写它的方式是最佳的,尽管您需要修复NEWVAR声明中嵌入引号的使用。您还需要对冒号和\l结束行序列进行双重转义...
NEWVAR="-a PNG -v \"Interrupts/s\“-h 130 -w 576 \ --watermark \""
hostname":"date '+%H:%M:%S - %d/%m/%Y'"\”--font标题:15:\ --font图例:7:--font单元:7:--font轴:5:-c CANVAS#000000 -c BACK#D8D8D8 \
DEF:DI=$RRDFDI:DI:AVERAGE \
CDEF:DIx=DI,8000,LT,DI,UNKN,IF \ AREA:DIx#FFDD44:\"\“\
LINE1.2:DIx#31B404:‘设备中断’\
GPRINT:DIx:MIN:'Min\:%6.0lf‘\ GPRINT:DIx:AVERAGE:'Avg\:%6.0lf’\
组:DIx:Max:‘Max\:%6.0lf’\ GPRINT:DIx:LAST:'Cur\:%6.0lf\l'"
https://stackoverflow.com/questions/21794937
复制相似问题