SHARE
TWEET

Будильник

a guest Nov 23rd, 2012 456 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #!/bin/bash
  2.  
  3. # Будильник
  4.  
  5. # включаем музыку
  6. alarm_start()
  7. {
  8.         # убиваем все процессы mplayer-а
  9.         jbs=(`ps al | grep [m]player | gawk -F ' ' '{print $3}'`)
  10.         for job in ${jbs[*]} ; do
  11.                 kill -15 $jbs
  12.         done
  13.        
  14.         # включаем случайную мелодию с бесконечным повтором
  15.         if [ -z "$1" ] ; then
  16.                 mplayer -loop 0 -shuffle $folder &> /dev/null &
  17.         fi
  18. }
  19.  
  20. # время по умолчанию
  21. tm='07:05'
  22.  
  23. # начальная громкость
  24. volume=10
  25.  
  26. # максимальная громкость
  27. volume_max=90
  28.  
  29. # время для смены задачи
  30. sec=2
  31.  
  32. # папка с музыкой
  33. folder=~username/Music/alarm/*
  34.  
  35. # временный файл для статуса
  36. temp=`mktemp -t alarm_status_XXX.txt`
  37.  
  38. # от намеренного закрытия сонного человека
  39. trap "echo -e '\nНеа, решите задачу!' && sleep 1 && alarm_start" SIGINT SIGTERM SIGHUP SIGQUIT SIGTSTP SIGSTOP
  40.  
  41.  
  42. if [[ $# > 0 ]] ; then
  43.         if [[ "$1" == [0-9]:[0-9][0-9] ]] || [[ "$1" == [0-9][0-9]:[0-9][0-9] ]] ; then
  44.                 tm=$1
  45.         else
  46.                 echo 'Установите правильное время. Пример: "07:00".' >&2
  47.                 exit 10
  48.         fi
  49. fi
  50.  
  51. date1=$(date -d "`date +%m/%d/%y` $tm" +%s)
  52. date2=$(date -d "`date +%m/%d/%y` $tm tomorrow" +%s)
  53.  
  54. # последняя ошибка (если неверная дата)
  55. err=$?
  56. if [[ $err > 0 ]] ; then
  57.         echo 'Установите правильное время. Пример: "07:00".' >&2
  58.         exit $err
  59. fi
  60.  
  61. # если настоящее время больше времени для пробуждения, то ставим завтрашний день
  62. if [[ $date1 < `date -u +%s` ]] ; then
  63.         date=$date2
  64. else
  65.         date=$date1
  66. fi
  67.  
  68.  
  69. # засыпаем
  70. sudo rtcwake -m mem -t $date
  71. # sudo echo "$date" > /sys/class/rtc/rtc0/wakealarm
  72.  
  73. # устанавливаем громкость
  74. amixer -q set Master $volume%
  75.  
  76. # день недели
  77. # day=$(( `date +%u` - 1 ))
  78.  
  79. # включаем музыку
  80. alarm_start
  81.  
  82. # повышаем уровень громкости
  83. while true ; do
  84.         amixer sset Master 1%+ &> /dev/null
  85.         volume=$(( $volume+1 ))
  86.        
  87.         if [ $volume -eq $volume_max ] ; then
  88.                 break
  89.         elif [ -s "$temp" ] ; then
  90.                 rm "$temp"
  91.                
  92.                 # возвращаем нормальную громкость
  93.                 amixer -q set Master 50%
  94.                
  95.                 break
  96.         fi
  97.         sleep 2
  98. done &
  99.  
  100. clear
  101. echo 'Чтобы выключить музыку решите пример:'
  102.  
  103. while true ; do
  104.         # ждём
  105.         echo "Ждите $sec сек."
  106.         sleep $sec
  107.        
  108.         # пример который надо решить
  109.         var1=$(( $RANDOM % 10000 - 5000 ))
  110.         var2=$(( ($RANDOM % 100000 - 50000)/($RANDOM % 800 + 1) ))
  111.        
  112.         # операторы
  113.         case $(( $RANDOM % 3 )) in
  114.                 0)
  115.                         opt='+'
  116.                         result=$(( $var1 + $var2 ))
  117.                 ;;
  118.                 1)
  119.                         opt='-'
  120.                         result=$(( $var1 - $var2 ))
  121.                 ;;
  122.                 2)
  123.                         opt='*'
  124.                         var2=$(( ($RANDOM % 5 + 5) ))
  125.                         result=$(( $var1 * $var2 ))
  126.                 ;;
  127.         esac
  128.        
  129.         # для красоты
  130.         if [[ $var2 < 0 ]] ; then
  131.                 if [[ "$opt" == '-' ]] ; then
  132.                         opt='+'
  133.                         var2=$(( $var2 * -1 ))
  134.                 elif [[ "$opt" == '+' ]] ; then
  135.                         opt='-'
  136.                         var2=$(( $var2 * -1 ))
  137.                 fi
  138.         fi
  139.        
  140.         # ответ
  141.         read -p "$var1 $opt $var2 = " answer
  142.        
  143.         # завершаем цикл если ответ был правильный
  144.         if [[ $answer == $result ]] ; then
  145.                 echo "Правильно! Ответ: $result."
  146.                 break
  147.         else
  148.                 clear
  149.                 echo -n "Неверно! Правильный ответ был: $var1 $opt $var2 = $result."
  150.                 if [ -n "$answer" ] ; then
  151.                         echo " Вы ответили: $answer."
  152.                 else
  153.                         echo ""
  154.                 fi
  155.         fi
  156. done
  157.  
  158. alarm_start false
  159.  
  160. # для выключения увеличения громкости
  161. echo "done" > "$temp"
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Not a member of Pastebin yet?
Sign Up, it unlocks many cool features!
 
Top