LinuxForum.Fans
Тема

Помогите исправить скрипт Bash

Автор: Linuxxxoid 17 сообщений 3820 просмотров
#225624

Начал изучать написание скриптов Bash, до этого вообще не программировал. Сейчас второй день как этим занимаюсь. В общем возникла сложность, не могли бы вы немного подправить мой скрипт.
Основные проблемы: при вводе (к примеру) Количество секунд, пишет количество дней и так по последовательности.
2) Помогите правильно прописать вывод времени (правильно пока что только год и секунды)

Вот сам скрипт
#!/bin/bash
echo "Твоё имя?"
read name
echo "$name - хмм...!"
echo "Когда ты ролился?"
echo "Дата твоего рождения должна выглядеть так день/месяц/год"
read var
echo "Могу предложить узнать сколько времени прошло с твоего рождения ;)"
echo "Что ты хочешь узнать о своём дне рождении??"
let="Колличество лет"
read let
echo "$let, прошедших с "$var" : `date +%C`"
mesacev="Количество месяцев"
read mesacev
echo "$mesacev, прошедших с $var : `date +%M` "
day="Количество дней"
read day
echo "$day, прошедших с $var : `date +%j` "
chasov="Количество часов"
read chasov
echo "$chasov, прошедших с $var : `date +%H` "
minut="Количество минут"
read minut
echo "$minut, прошедших с $var : `date +%M`"
secund="Количество секунд"
read secund
echo "$secund, прошедших с $var : `date +%s` "

#225626

Linuxxxoid,
что-то я не увидел, где в вашем скрипте вычисляется разница между текущей датой и днём рождения?
P.S. let - не лучшее имя для переменной wink

#225635
Lupo Alberto написал:
Linuxxxoid,
что-то я не увидел, где в вашем скрипте вычисляется разница между текущей датой и днём рождения?
P.S. let - не лучшее имя для переменной wink

Так как мне быть чтобы результат выдавало не последовательно а по запросу? :o

Вот что выводит консоль, на запрос о секундах, затем все по порядку
PS правильно только года и секунды, остальное потом поищу в гугле.

text
Колличество секунд, прошедших с 10/06/1991 : 20

, прошедших с 10/06/1991 : 41

, прошедших с 10/06/1991 : 030

, прошедших с 10/06/1991 : 18

, прошедших с 10/06/1991 : 42

, прошедших с 10/06/1991 : 1327923722

#225636

смотрите в сторону оператора case

#225637
riso написал:
смотрите в сторону оператора case

Спс туда и посмотрю, отпишусь и не надейтесь wink

#225656

С case разобрался, выводит теперь по определенной команде "цифре" smile
А вот с датами пока нет (
По прежнему удается вывести только секунды и минуты.
Вот то что получилось:

text
#!/bin/bash
echo "Твоё имя?"
    read name
    echo "$name - хмм...!"
echo "Когда ты ролился?"
echo "Дата твоего рождения должна выглядеть так день/месяц/год"
read var
echo "Могу предложить узнать сколько времени прошло с твоего рождения ;)"
echo "Что ты хочешь узнать о своём дне рождении??"
echo "Колличество лет со дня рождения - 1"
echo "Колличество месяцев со дня рождения - 2"
echo "Колличество дней со дня рождения - 3"
echo "Колличество часов со дня рождения - 4"
echo "Колличество минут со дня рождения - 5"
echo "Колличество секунд со дня рождения - 6"
echo "Выход - 7"
read doing
case $doing in
1)
echo "Колличество лет с "$var" : `date +%C`"
;;
2)
echo "Колличество месяцев прошедших с $var : `date +%M` "
;;
3)
echo "Колличество дней прошедших с $var : `date +%j` "
;;
4)
echo "Колличество часов прошедших с $var : `date +%H` "
;;
5)
echo "Колличество минут прошедших с $var : `date +%M`"
;;
6)
echo "Колличество секунд прошедших с $var : `date +%s` "
;;
7)
echo "Бай бай"
;;
esac
#225658

Linuxxxoid,

Lupo Alberto написал:
что-то я не увидел, где в вашем скрипте вычисляется разница между текущей датой и днём рождения?
#225660

Lupo Alberto написал:
Linuxxxoid,
[quote=Lupo Alberto]что-то я не увидел, где в вашем скрипте вычисляется разница между текущей датой и днём рождения?
[/quote]

А как это можно сделать? И можно ли получить ссылку на соответствующий материал? :o
PS - странно почему тогда количество лет и секунд правильно выводит oO
#225663
Linuxxxoid написал:
PS - странно почему тогда количество лет и секунд правильно выводит blink
text
man date
...
 %C     century; like %Y, except omit last two digits (e.g., 20)
...
%s     seconds since 1970-01-01 00:00:00 UTC
...

У вас должно выводить столетие и количество секунд прошедших с 1 января 1970 года.

Linuxxxoid написал:
А как это можно сделать? И можно ли получить ссылку на соответствующий материал?

Это обычная арифметика wink
В первую очередь читать, разумеется, ABS.

#225674
Lupo Alberto написал:
Это обычная арифметика wink
Показать
text
#!/bin/bash
 echo "Введите дату вашего рождения в этом году в формате МЕСЯЦ/ДЕНЬ/2012:"
 read BIRTHDAY_DATE
 clear
 while :
 do
                  SECONDS_REMAIN=$(expr $(date +%s -d ${BIRTHDAY_DATE}) - $(date +%s))
                  echo "До вашего дня рождения осталось ${SECONDS_REMAIN} сек."
                  sleep 1
                 clear
done

#225798

Решил усложнить немного скрипт, чтобы был выбор между сколько осталось до дня рождения и сколько прошло.
Тут возникла следующая путаница (не отображается пунк b при выборе) :( :(

text
#!/bin/bash
echo "Сколько осталось до дня рождения? - a"
echo "Сколько прошло со дня моего рождения? - b"

read doing case $doing in

a ) echo "Количество месяцев до дня рождения - 1" echo "Количество дней до дня рождения - 2"

read A case $A in

1 ) echo "Месяцев осталось";; 2 ) echo "Дней осталось";;

b ) echo "Колличество месяцев со дня рождения " echo "Колличество месяцев со дня рождения"

read B case $B in

1 ) echo "Месяцев прошло";; 2 ) echo "Месяцев прошло";;

esac esac esac

#225799

Вложенность операторов case...esac нарушена и ;; забыты.

Показать
text

#!/bin/bash
echo "Сколько осталось до дня рождения? - a"
echo "Сколько прошло со дня моего рождения? - b"

read doing case $doing in

a ) echo "Количество месяцев до дня рождения - 1" echo "Количество дней до дня рождения - 2"

read A case $A in

1 ) echo "Месяцев осталось";; 2 ) echo "Дней осталось";;

esac ;; b ) echo "Колличество месяцев со дня рождения - 1" echo "Колличество месяцев со дня рождения - 2"

read B case $B in

1 ) echo "Месяцев прошло";; 2 ) echo "Месяцев прошло";;

esac ;; esac

#225848

Делаю так:
MES_REMAIN=$(expr $(date +%m -d ${var}) - $(date +%m))
echo "До вашего дня рождения осталось ${MES_REMAIN} месяцев."

Выдает 9 месяцев, а на самом деле должно быть 5 :(

#225903

Linuxxxoid,
date +%m -d ${var} показывает номер по порядку месяца в указанной вами дате.
date +%m показывает номер по порядку месяца в текущей дате.
P.S. IMHO, для тренировки придумайте более практически ценную задачу — интереснее будет решать wink

#226926

Забил на Bash, начал изучать Python. Тему можно закрывать! wink

#226928

не закончив одно дело, начинаете другое. Не хорошо это.

Войдите или зарегистрируйтесь, чтобы ответить.