bash & grep

Автор geek, 03 Января 2011, 01:41

« предыдущая тема - следующая тема »

0 Пользователей и 1 Гость просматривают эту тему.

geek

Нужно получить текущее значение громкости.

В терминале выпоняется команда
amixer get Master playback она даёт, допустим, такой вывод

Simple mixer control 'Master',0
 Capabilities: pvolume pswitch pswitch-joined penum
 Playback channels: Front Left - Front Right
 Limits: Playback 0 - 65536
 Mono:
 Front Left: Playback 45876 [70%] [on]
 Front Right: Playback 45876 [70%] [on]
Задача: каким-то шаблоном грепнуть этот вывод и записать значение(в данном случае 45876) в переменную.
42 - ответ на твой вопрос.

B@F

03 Января 2011, 12:20 #1 Последнее редактирование: 03 Января 2011, 12:44 от Zhek@Ch
Я посоветую так: Первым наперво тебе нужно отсортировать нужные строчки, дя этого есть команда grep. Она ищет нужные совпадения и выводит строку, туда куда ты ей скажешь, по умолчанию на экран. В твоем случаи можно так: grep "Front Left: Playback". Т.е.
amixer get Master playback | grep "Front Left: Playback"вывод будет таким:
Front Left: Playback 45876 [70%] [on]Дальше тебе надо перенаправить этот вывод на ввод команды cut - выводит выбранные части строк (столбцы) каждого заданного файла. В твоем случаи так:
amixer get Master playback | grep "Front Left: Playback" | cut -c 22-28
45876
И аналогично Right. Возможно есть более элегантный способ это реализовать, но я сделал так. Дело в том что тут ты зависишь от длины числа 45876 и если оно будет маленьким, то символы, стоящие за ним попадут в переменную, а это не good.
Ну а чтобы это дело записать в переменную, то так:
zvuk=`amixer get Master playback | grep "Front Left: Playback" | cut -c 22-28`теперь переменная $zvuk равна тому выводу, что получится при выполнении такого конвейера.

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