Файл Bash - найти значение из выходных данных команды и сохранить как переменную

Вот альтернатива использованию цикла for, если то, что вам нужно сделать, простое (и не требует установки переменных в основной оболочке и т. Д.).

Вы можете использовать find с -exec и использовать -maxdepth 1 , чтобы избежать повторного перехода в подкаталог.

[ -n "$1" ] && find "$dir" -type f -mindepth 1 -maxdepth 1 -exec "$@" "{}" \;

[-n "$ 1"] используется, чтобы избежать выполнения всех файлов в каталоге, когда скрипту не передаются аргументы.

1
21.04.2016, 17:53
4 ответа

Не очень изящно, но если хотите, можете просто использовать awk, изменив свой последний строковый скрипт:

echo $output1 | grep battery.charge | awk {'print $2'}

И если вы хотите сохранить его как переменную:

output2=$(echo $output1 | grep battery.charge | awk {'print $2'})
0
27.01.2020, 23:25

Просто назначьте переменный

BCHRG="$( upsc ups@localhost | grep battery.charge | awk {'print $2'} )"
0
27.01.2020, 23:25

Как одна строка без промежуточной переменной и без grep:

output="$( upsc ups@localhost | awk '/battery\.charge/ {print $2}'
2
27.01.2020, 23:25

Ваш вопрос касается только получения одной переменной, но один из подходов заключается в том, чтобы прогнать весь вывод 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

Это позволяет получить нужное значение и не требует много дополнительной работы, если вы позже решите, что вам нужно другое значение.

1
27.01.2020, 23:25

Теги

Похожие вопросы