#!/bin/bash id=`hostname`-$$ if [ "$1" = "stop" ] then for i in `pgrep -f "/bin/bash /opt/mqtt-mpd/mqmpdj"` do killtree $i 9 done exit 0 fi . /opt/mqtt-mpd/mqmpd.cfg # запускаем процессы, мониторящие состояние i=0 while [ "x${hosts[i]}" != "x" ] do /opt/mqtt-mpd/mqmpdj ${hosts[i]} ${passwd[i]} & i=$(( $i + 1 )) done # сами остаемся слушать команды mosquitto_sub -i mqtt-mpd-$id -v -h $mqhost -p $mqport -t "$mqcmd/#" -u $mquser -P $mqpassword | while read line do template="s!$mqcmd/!!" addr=`echo $line | cut -f 1 -d " " | sed $template` arg=`echo $line | cut -f 2 -d " "` echo $addr $arg host=`echo $addr | cut -f 1 -d "/"` cmd=`echo $addr | cut -f 2 -d "/"` i=0 while [ "x${hosts[i]}" != "x" ] do if [ "${hosts[i]}" = "$host" ] then mpdpass=${passwd[i]} if [ "$mpdpass" = "-" ] then mpccmd="mpc -h $host" else mpccmd="mpc -h $host -P $mpdpass" fi break fi i=$(( $i + 1 )) done arg=`printf "%q" $arg` if [[ "$arg" =~ [A-Za-z0-9]+ ]] then echo "$cmd -> $arg" case $cmd in volume) if [ "$arg" = "INCREASE" ] then $mpccmd volume +5 fi if [ "$arg" = "DECREASE" ] then $mpccmd volume -5 fi if [[ "$arg" =~ [0-9]+ ]] then reply=( `$mpccmd volume`) currvolume=`echo ${reply[1]} | sed 's/%//'` if [ "$currvolume" ] then if [ "$arg" -gt "$currvolume" ] then delta=$(( $arg - $currvolume )) $mpccmd volume +$delta fi if [ "$arg" -lt "$currvolume" ] then delta=$(( $currvolume - $arg )) $mpccmd volume -$delta fi if [ "$arg" -eq "$currvolume" ] then $mpccmd repeat $mpccmd repeat fi fi fi ;; status) case $arg in playing) $mpccmd play ;; stopped) $mpccmd stop ;; paused) $mpccmd pause ;; *) ;; esac ;; currentnum) $mpccmd play $arg ;; repeat|random|single|consume) $mpccmd $cmd $arg ;; *) echo "Неизвестная команда $cmd" ;; esac else echo "Недопустимый аргумент $arg" fi done