脚本输出为bash变量

时间:2018-04-20 18:59:05

标签: bash

我有一个python脚本,输出如下:

$ sudo ./demo.py --backend bluepy poll C4:7C:8D:xx:xx:xx
Getting data from Mi Flora
FW: 3.1.8
Name: Flower care
Temperature: 17.4
Moisture: 39
Light: 138
Conductivity: 513
Battery: 99

我想在bash脚本中使用这些输出行作为bash变量:

FW (=3.1.8), NAME (="Flower care"), TEMPERATURE (=17.4), MOISTURE (=39), LIGHT (=138), CONDUCTIVITY (=513), BATTERY (=99)

任何想法如何做到这一点?

2 个答案:

答案 0 :(得分:1)

在循环中读取输出并使用case语句分配变量。

while read -r prefix val; do
    case "$prefix" in 
        FW:) fw=$val ;;
        Name:) name=$val ;;
        ...
    esac
done < <(sudo ./demo.py --backend bluepy poll C4:7C:8D:xx:xx:xx)

仅供参考,您不应使用大写变量名称,这些名称通常是为环境变量保留的。

答案 1 :(得分:1)

IIUC,您可以像这样设置所有变量:

$ eval $(sudo ./demo.py --backend bluepy poll C4:7C:8D:xx:xx:xx | tail +2 | awk '{$1=tolower($1);print}' | sed 's,: ,=,' | sed 's,=,=",' | sed 's,$,",')
$ echo $fw
3.1.8
$ echo $name
Flower care
$ echo $temperature
17.4
$ echo $moisture
39
$ echo $conductivity
513
$ echo $battery
99