楼主:
apolog (霜降小P)
2017-08-25 18:38:18小弟在写测试script时, 在使用eval上遇到了一些问题, 想请教:
因为Cmp${Num}_F代入的数值是小数, 所以又增加了bc来辅助, Code如下:
需求是判断Cmp${Num}_F是否介于LOWER与UPPER之间,
但是在变量$Cmp${Num}_F放到if里面的时候出了错误, 请问我该怎么在if里面使用这类型的变量?
##COMPARISON
Amount=5
UPPER=1234.567
LOWER=12.3456
for ((Num=1 ; Num<Amount; Num++))
do
eval Cmp${Num}_F=$(cat xxx.log |grep Cmp${Num}_F |awk 'print $2')
done
for (( Num=1 ; Num<$Amount ; Num++ ))
do
if [ `echo "`$Cmp${Num}_F` > $UPPER"|bc` -eq 1 ] || [ `echo "`$Cmp${Num}_F` < $LOWER"|bc` -eq 1 ]; then
echo " Data in Range `eval echo '$'Cmp${Num}_F` Front: ($LOWER ~ $UPPER) "
else
echo " Data Not in Range"
fi
done
作者:
Bellkna (柔弱气质伪少女)
2017-08-25 18:47:00变量用双引号包起来 外层用单引号 ``改用$() 这样试试?
作者:
sppmg (sppmg)
2017-08-25 20:15:00随便看,但 > 在test []中应该要用-lt。然后是在单行多次用``时,一律用$()取代
楼主:
apolog (霜降小P)
2017-08-25 23:21:00请问B大的意思是if [`echo "$(Cmp${Num}_F)"|bc` -eq 1]这样吗?这样改的话会出现 Cmp1_F: command not found(standard_in) 1: syntax_error另外, OSD大的例子是变量$Num, 好像变成复合式变量用法上会变得不太一样 , Cmp${Num}_F 是先前用eval宣告给值
请问你加上 Cmp 和 _F 是做什么用途? 不懂你的问题..
楼主:
apolog (霜降小P)
2017-08-25 23:50:00因为我希望变量是像 Cmp1_F Cmp2_F Cmp3_F....这样下去的每一次循环Cmp${Num}_F变量代进来的小数值都会不同
可是你没 宣告 这些变量阿 : Cmp1_F Cmp2_F Cmp3_F
楼主:
apolog (霜降小P)
2017-08-25 23:54:00其实实际上的变量是更烦人的 Cmp_raw${ID}_col${Num}_F哈...的确 因为我觉得那个宣告不是问题的重点XD我更改一下内文好了 等我一下
楼主:
apolog (霜降小P)
2017-08-26 00:05:00xxx.log 呢? 如果log太多,自己简化一下.
楼主:
apolog (霜降小P)
2017-08-26 00:14:00楼主:
apolog (霜降小P)
2017-08-26 01:14:00楼上大大的方式可行喔! 不过这就代表if[]里面不能使用这类型的叠加变量了 ~"~a 是吗?
楼主:
apolog (霜降小P)
2017-08-31 16:33:00没想到O大后续还有提供正解! 已试过感谢 (跪拜