Linux Forum Казахстан

Общий => Вопрос новичка => Тема начата: geek от 03 Января 2011, 01:41

Название: bash & grep
Отправлено: geek от 03 Января 2011, 01:41
Нужно получить текущее значение громкости.

В терминале выпоняется команда
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) в переменную.
Название: bash & grep
Отправлено: B@F от 03 Января 2011, 12:20
Я посоветую так: Первым наперво тебе нужно отсортировать нужные строчки, дя этого есть команда 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 (http://www.opennet.ru/man.shtml)