2011-06-05 80 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