#!/bin/sh # _usage() { cat < | -t [-n] [-o ] -h show this help message -c say time -d say date -g godville.net -m custom message -t say device themperature (only cpu dev is supported) -n show notification -o save to file Example: say -m "Hello, World!" -n -o hello.wav EOF exit ${1} } _pluralform(){ n=$(( ${1} % 100 )) n1=$(( ${n} % 10 )) if [ ${n} -gt 10 -a ${n} -lt 20 ]; then echo ${4} elif [ ${n1} -gt 1 -a ${n1} -lt 5 ]; then echo ${3} elif [ ${n1} -eq 1 ]; then echo ${2} else echo ${4} fi } _date() { echo "Сегодня - $( date2word )." } _time() { echo "Текущее время - $( time2word )" } _godville() { base="https://godville.net/gods/api" god="$( jq -rn --arg x 'god name' '$x|@uri' )" api_key="" url="${base}/${god}/${api_key}" quote="$( ${CURL} "${url}" | jq ".diary_last" )" echo "${quote}" } _temperature() { D=${1:-none} M= case ${D} in none) M="А куда градусник прикладывать?" ;; cpu) t=0 ncpu=$( sysctl -n hw.ncpu ) for C in $( seq 0 $(( ${ncpu} - 1 )) ); do t1=$( sysctl -n dev.cpu.${C}.temperature 2>/dev/null | \ sed 's/,.*//' ) t1=${t1:-0} if [ ${t1} -gt ${t} ]; then t=${t1}; fi done if [ ${t} -eq 0 ]; then M="Градусник у процессора сломался или не поддерживается." else M="Температура центрального процессора: ${t}" M="${M} $( _pluralform ${t} градус градуса градусов )" M="${M} по Цельсию." fi ;; esac echo "${M}" } if [ $# -lt 1 ]; then _usage; fi SAY_CMD="$( which RHVoice-test )" if [ -z "${SAY_CMD}" ]; then echo "Speech synthesizer not found" exit 1 fi SAY_PARAM="--rate 95 --pitch 120 --volume 30 --profile elena+slt" CURL="$( which curl )" if [ -z "${CURL}" ]; then echo "curl is required, but not found" exit 1 else CURL="${CURL} -s" fi NOTIFY="$( which notify-send )" ACTION= DEV= MSG= SEND=0 SUMMARY= while getopts cdghm:no:t: OPT do case ${OPT} in c|d|g|m|t) if [ -z "${ACTION}" ]; then case ${OPT} in c) ACTION="time" ;; d) ACTION="date" ;; g) ACTION="godville" SUMMARY="Годвиль - Вести с полей" ;; m) ACTION="message" MSG="${OPTARG}" ;; t) ACTION="temperature" DEV="${OPTARG}" ;; esac else echo "Only one of the options -d, -f, -g, -m, -t is allowed." exit 2 fi ;; n) SEND=1 ;; o) SAY_PARAM="${SAY_PARAM} -o ${OPTARG}" ;; h) _usage 0 ;; *) _usage 2 ;; esac done if [ "${ACTION}" != "message" ]; then MSG="$( _${ACTION} ${DEV} )" fi if [ ${SEND} -eq 1 ] && [ -n "${NOTIFY}" ]; then ${NOTIFY} -u low -t 10000 -i dialog-information "${SUMMARY:- }" "${MSG}" fi echo "${MSG}" | ${SAY_CMD} ${SAY_PARAM}