2011-06-05 84 views
1

我有一个脚本,它使用传感器来获取Ubuntu中的CPU临时文件。需要帮助解析bash中的字符串

IN="`/usr/bin/sensors -f | grep 'Core ' | cut -f2 -d"+" | cut -f1 -d '.'`" 
echo $IN 

它会产生这样的

96 100 98 102 

结果我需要做的是能够调用它像CPU1拿到第一,CPU2获得第二个,依此类推。我需要分解它,所以我可以使用MRTG监视核心临时数据,可能有更好的方法,但我还没有找到一个。

回答

4

可以转换$IN到一个数组是这样的:

TEMPERATURES=($IN) 

然后,您可以索引该数组以获得特定的温度;例如:

echo ${TEMPERATURES[0]} 

如果你传递一个命令行参数来你的脚本,你可以使用它作为一个数组索引:然后

WHICH=$1      # 1st command line arg; $0 is name of script 
TEMPERATURES=($IN) 
echo ${TEMPERATURES[$WHICH]} 

调用该脚本可能是这样的(假设脚本被称为cpu):

$ ./cpu 0 
96 
$ ./cpu 1 
100 
$ ./cpu 2 
98 
$ ./cpu 3 
102 
+0

真棒,工作的魅力! – Kelso 2011-06-05 18:23:45

2
IN="96 100 98 102"  

I=0 
for val in $IN; do 
    I=$((I+1)) 
    eval "cpu$I=$val" 
done 

echo $cpu1 

我回答字面上如何获得$ CPU1等,但我建议你做什么@Richard建议和使用数组:)

1

除了使用大量的管道提取CPU温度的,你可以使用awk做在一个单一的管道:

#!/bin/sh 
/usr/bin/sensors -f | awk -F"[+.]" -v c="^Core $1" '$0~c{print $2}' 

用法:

$./cpu 0 
$./cpu 1 
$./cpu 2 
+0

另一个简化的解决方案,非常感谢! – Kelso 2011-06-07 13:00:10