2013-03-15 66 views
0

下面是我的代碼。但bash正在分詞,因此我失敗了。如何使我的腳本,以便沒有分詞。我不想讓數組做分詞

namaSensor=$(sensors | egrep "°C" | awk '{print $0}' | awk -F ':' '{print $1}') 
for sensor in $namaSensor 
do 
    if [ $(sensors | grep -c "$sensor") -ne 0 ] 
    then 
     currentTemperature=$(sensors | egrep "$sensor" | awk '{print $0}' | awk -F '+' '{print $2}' | cut -c 1-4 | awk -F '.' '{print $1}') 
     maxTemperature=$(sensors | egrep "$sensor" | awk '{print $0}' | awk -F '+' '{print $3}' | cut -c 1-4 | awk -F '.' '{print $1}') 
     if [ $currentTemperature -lt $maxTemperature ] 
     then 
      printf "current temperature is %d°C and the maximum allowed temperature is %d°C\n" "$currentTemperature" "$maxTemperature" 
      printf "temperature is within the maximum allowed temperature\n" 
      echo "$sensor" 
     else 
      printf "current temperature is %d°C and the maximum allowed temperature is %d°C\n" "$currentTemperature" "$maxTemperature" 
      printf "temperature is more than the maximum allowed temperature\n" 
      #exit 255 
     fi 
    fi 
done. 

這是我單位的傳感器輸出。

acpitz-virtual-0 
Adapter: Virtual device 
temp1:  +40.0°C (crit = +111.0°C) 
temp2:  +40.0°C (crit = +111.0°C) 

coretemp-isa-0000 
Adapter: ISA adapter 
Physical id 0: +34.0°C (high = +87.0°C, crit = +105.0°C) 
Core 0:   +31.0°C (high = +87.0°C, crit = +105.0°C) 
Core 1:   +22.0°C (high = +87.0°C, crit = +105.0°C) 

請幫

+0

我認爲你還需要提供你期望看到的。此外,正在執行的傳感器的輸出將有助於 – Vahid 2013-03-15 07:10:14

+0

因此,如果同時存在最大溫度和臨界溫度,則使用最大值。如果只有臨界溫度,那麼應該使用? – Scrutinizer 2013-03-15 09:28:22

回答

0

據我瞭解你有你的陣列分裂如下:

物理

ID

等。要更改此行爲,您需要將您的內部字段分隔符(IFS)更改爲換行符。所以你的代碼應該是這樣的:

IFS=$'\n' 
nameSensor=$(sensors | egrep "°C" | awk '{print $0}' | awk -F ':' '{print $1}') 
for sensor in $nameSensor 
do 
    if [ $(sensors | grep -c "$sensor") -ne 0 ]; then 
     currentTemperature=$(sensors | egrep "$sensor" | awk '{print $0}' | awk -F '+' '{print $2}' | cut -c 1-4 | awk -F '.' '{print $1}') 
     maxTemperature=$(sensors | egrep "$sensor" | awk '{print $0}' | awk -F '+' '{print $3}' | cut -c 1-4 | awk -F '.' '{print $1}') 
     if [ $currentTemperature -lt $maxTemperature ]; then 
      printf "current temperature is %d°C and the maximum allowed temperature is %d°C\n" "$currentTemperature" "$maxTemperature" 
      printf "temperature is within the maximum allowed temperature\n" 
      echo "$sensor" 
     else 
      printf "current temperature is %d°C and the maximum allowed temperature is %d°C\n" "$currentTemperature" "$maxTemperature" 
      printf "temperature is more than the maximum allowed temperature\n" 
      #exit 255 
     fi 
    fi 
done 
+0

謝謝。它以我想要的方式工作。 – 2013-03-15 09:45:22