Начал изучать написание скриптов 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` "
Помогите исправить скрипт Bash
Linuxxxoid,
что-то я не увидел, где в вашем скрипте вычисляется разница между текущей датой и днём рождения?
P.S. let - не лучшее имя для переменной wink
Linuxxxoid,
что-то я не увидел, где в вашем скрипте вычисляется разница между текущей датой и днём рождения?
P.S. let - не лучшее имя для переменной wink
Так как мне быть чтобы результат выдавало не последовательно а по запросу? :o
Вот что выводит консоль, на запрос о секундах, затем все по порядку
PS правильно только года и секунды, остальное потом поищу в гугле.
Колличество секунд, прошедших с 10/06/1991 : 20
, прошедших с 10/06/1991 : 41
, прошедших с 10/06/1991 : 030
, прошедших с 10/06/1991 : 18
, прошедших с 10/06/1991 : 42
, прошедших с 10/06/1991 : 1327923722
смотрите в сторону оператора case
смотрите в сторону оператора case
Спс туда и посмотрю, отпишусь и не надейтесь wink
С case разобрался, выводит теперь по определенной команде "цифре" smile
А вот с датами пока нет (
По прежнему удается вывести только секунды и минуты.
Вот то что получилось:
#!/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 "Бай бай"
;;
esacLinuxxxoid,
что-то я не увидел, где в вашем скрипте вычисляется разница между текущей датой и днём рождения?
[/quote]Linuxxxoid,
[quote=Lupo Alberto]что-то я не увидел, где в вашем скрипте вычисляется разница между текущей датой и днём рождения?
А как это можно сделать? И можно ли получить ссылку на соответствующий материал? :o
PS - странно почему тогда количество лет и секунд правильно выводит oO
PS - странно почему тогда количество лет и секунд правильно выводит blink
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 года.
А как это можно сделать? И можно ли получить ссылку на соответствующий материал?
Это обычная арифметика wink
В первую очередь читать, разумеется, ABS.
Это обычная арифметика wink
Показать
#!/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Решил усложнить немного скрипт, чтобы был выбор между сколько осталось до дня рождения и сколько прошло.
Тут возникла следующая путаница (не отображается пунк b при выборе) :( :(
#!/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
Вложенность операторов case...esac нарушена и ;; забыты.
Показать
#!/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
Спасибо wink
Делаю так:
MES_REMAIN=$(expr $(date +%m -d ${var}) - $(date +%m))
echo "До вашего дня рождения осталось ${MES_REMAIN} месяцев."
Выдает 9 месяцев, а на самом деле должно быть 5 :(
Linuxxxoid,
date +%m -d ${var} показывает номер по порядку месяца в указанной вами дате.
date +%m показывает номер по порядку месяца в текущей дате.
P.S. IMHO, для тренировки придумайте более практически ценную задачу — интереснее будет решать wink
Забил на Bash, начал изучать Python. Тему можно закрывать! wink
не закончив одно дело, начинаете другое. Не хорошо это.