Advertisement
Guest User

Будильник

a guest
Nov 23rd, 2012
626
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 3.76 KB | None | 0 0
  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"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement