Linux脚本练习之script007-编写一个脚本,输入自己的生日时间(日期格式是:`YYYYMMDD`),计算还有多少天多少个小时是自己的生日。

Posted 二木成林

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux脚本练习之script007-编写一个脚本,输入自己的生日时间(日期格式是:`YYYYMMDD`),计算还有多少天多少个小时是自己的生日。相关的知识,希望对你有一定的参考价值。

script007

题目

编写一个脚本,输入自己的生日时间(日期格式是:YYYYMMDD),计算还有多少天多少个小时是自己的生日。

分析

本题考查的知识点:

  • date 命令
  • read 命令
  • if...else 条件语句
  • $(())

思路:

  • 首先从键盘读取 YYYYMMDD 格式的生日日期。
  • 校验输入的生日参数是否有效。
  • 根据输入的生日日期得到月份和天,获取今年的年份,就可以得到今年的具体生日日期。
  • 获取今年生日日期距离 1970-01-01 00:00:00 的秒数;获取目前时间距离 1970-01-01 00:00:00 的秒数。
  • 然后将两者进行求差运算,结果正是距离生日的秒数,如果是正数表示还没有到达生日,如果是负数则表示已经过了今年的生日。
  • 将秒数转换成小时和天数后,最后打印输出。

脚本

#!/bin/bash

####################################
#
# 功能:编写一个脚本,输入自己的生日时间(日期格式是:YYYYMMDD),计算还有多少天多少个小时是自己的生日。
#
# 使用:直接执行,不需要任何参数
#
####################################


# 从键盘输入自己的生日
read -p "请输入自己的生日(YYYYMMDD):" birthday

# 校验输入的生日是否符合要求的格式
echo "$birthday" | egrep "[0-9]8"
if [ $? -ne 0 ]; then
    echo "请输入符合指定格式的生日!"
    exit
fi

# 获取今年的年份
y=$(date "+%y")
# 获取生日所在月份
m=$(date --date="$birthday" "+%m")
# 获取生日所在日
d=$(date --date="$birthday" "+%d")

# 获取今年生日距 1970-01-01 00:00:00 的秒数
bir_s=$(date --date="$y$m$d" "+%s")
# 计算当前时间距 1970-01-01 00:00:00 的秒数
now_s=$(date "+%s")

# 计算生日与当前时间相差的秒数
bir_now_s=$(($bir_s-$now_s))
# 把两者相减得到的差(秒)转换成天数
bir_d=$(($bir_now_s/60/60/24))
# 转换小时数
bir_h=$(($bir_now_s/60/60))

# 如果$bir_now_s值大于等于0的话,就输出“你还有多少天、多少个小时过生日”
if [ "$bir_now_s" -ge 0 ];then
   echo "还有 $bir_d 天、$bir_h 小时是你的生日!"
# 如果$bir_now_s值小于0的话,就输出“你已经过了多少天、多少个小时生日”
elif [ "$bir_now_s" -lt 0 ];then
   echo "你的生日已经过去 $((-1*$bir_d)) 天、$((-1*$bir_h)) 小时了!"
fi

测试

执行 ./script007.sh 调用脚本,然后输入 YYYYMMDD 格式的生日日期。

以上是关于Linux脚本练习之script007-编写一个脚本,输入自己的生日时间(日期格式是:`YYYYMMDD`),计算还有多少天多少个小时是自己的生日。的主要内容,如果未能解决你的问题,请参考以下文章

Linux脚本练习之script033-编写生成脚本基本格式的脚本,包括作者,联系方式,版本,时间,描述等。

Linux脚本练习之script068-第二列是否有重复

Linux脚本练习之script025-判断用户输入的参数是否为正整数。

Linux脚本练习之script004-编写一个程序,先查看 `/root/test/logical` 这个名称是否存在,如果不存在,则创建一个文件。使用 `touch` 来创建,创建完成后离开。

Linux脚本练习之script005-从键盘读入 10 个数,显示最大值和最小值。

Linux脚本练习之script079-处理文本