UPS에 연결하고 배터리 값을 가져와 변수에 저장하는 스크립트를 만들려고 합니다.
UPS에 성공적으로 연결하여 정보를 얻었으나 배터리 값을 변수로 가져오는 데 어려움을 겪고 있습니다.
지금까지의 스크립트
#!/bin/bash
#
# Connect to ups and output values into output var
output="$( upsc ups@localhost)"
# Trip the output to just have battery charge info
output1="$( sed -n '/battery.charge:*/,/./p' <<< "$output" )"
echo "$output1";
출력 반환
ambient.1.humidity.alarm.high: 60.00
ambient.1.humidity.alarm.low: 30.00
ambient.1.temperature.alarm.high: 40.00
ambient.1.temperature.alarm.low: 10.00
battery.charge: 100.00
battery.current: 0.00
battery.current.total: 0.00
battery.date: 03/15/2013
battery.runtime: 2040.00
battery.runtime.low: 120
battery.voltage: 54.70
device.mfr: APC
device.model: Smart-UPS 2200
device.serial: IS1248007101
device.type: ups
driver.name: snmp-ups
driver.parameter.pollinterval: 2
driver.parameter.port: 172.16.27.207
driver.version: 2.7.2
driver.version.data: apcc MIB 1.2
driver.version.internal: 0.72
input.frequency: 50.00
input.sensitivity: high
input.transfer.high: 253
input.transfer.low: 208
input.transfer.reason: smallMomentarySpike
input.voltage: 249.00
input.voltage.maximum: 249.00
input.voltage.minimum: 247.50
output.current: 2.30
output.frequency: 50.00
output.voltage: 249.00
output.voltage.nominal: 230
ups.delay.shutdown: 0
ups.delay.start: 0
ups.firmware: UPS 06.5 / MCU 11.0 / UBL 08.2 / MBL 11.0 (ID18)
ups.id: UPS-Understage
ups.load: 25.30
ups.mfr: APC
ups.mfr.date: 11/24/2012
ups.model: Smart-UPS 2200
ups.serial: IS1248007101
ups.status: OL
ups.temperature: 18.30
ups.test.date: 04/12/2016
ups.test.result: Ok
배터리라고 적힌 부분만 필요합니다.충전: 100.00
변수로
스크립트를 통해 내가 얻는 결과는 다음과 같습니다.
battery.charge: 100.00
battery.current: 0.00
도움이 필요하시면 배터리 충전 비트에서 100.00을 받으세요.
답변1
중간 변수도 없고 다음도 없는 한 줄로 grep
:
output="$( upsc ups@localhost | awk '/battery\.charge/ {print $2}'
답변2
귀하의 질문은 단일 변수를 얻는 것과만 관련되어 있지만 한 가지 접근 방식은 전체 출력을 환경 upsc
으로 빨아들이고 bash
거기에서 필요한 값을 선택하는 것입니다. 재치 있게:
upsc_parser()
{
local upsc_var
local upsc_val
while read
do
upsc_var="${REPLY%: *}"
upsc_val="${REPLY#${upsc_var}: }"
upsc_var="${upsc_var//./_}"
upsc_val="${upsc_val//[\"\'\\]/}"
echo "upsc_${upsc_var}=\"${upsc_val}\""
done
}
eval $(upsc | upsc_parser)
echo $upsc_battery_charge
이렇게 하면 나중에 다른 값이 필요하다고 결정하는 경우 추가 작업을 많이 하지 않고도 필요한 값을 얻을 수 있습니다.
답변3
배터리 충전 관련 출력을 변수에 할당하기만 하면 됩니다.
BCHRG="$( upsc ups@localhost | grep battery.charge | awk {'print $2'} )"
답변4
그다지 우아하지는 않지만 원하는 경우 awk를 사용하여 스크립트의 마지막 줄을 변경할 수 있습니다.
echo $output1 | grep battery.charge | awk {'print $2'}
변수로 유지하려면 다음을 수행하십시오.
output2=$(echo $output1 | grep battery.charge | awk {'print $2'})