!/bin/bash
get_mon_days()
{
Y=`expr substr $1 1 4`
M=`expr substr $1 5 2`
r1=`expr $Y \% 4`
r2=`expr $Y \% 100`
r3=`expr $Y \% 400`
case $M in
01|03|05|07|08|10|12) days=31;;
04|06|09|11) days=30;;
02)
r1=`expr $Y \% 4`
r2=`expr $Y \% 100`
r3=`expr $Y \% 400`
# 闰年
if [ r1 -eq 0 -a r2 -ne 0 -o r3 -eq 0 ] ; then
days=29
else
days=28
fi
;;
*)
days=0
;;
esac
echo $days
}
check_date()
{
# 0 合法 1 非法
FLAG=0
Y=`expr substr $1 1 4`
M=`expr substr $1 5 2`
D=`expr substr $1 7 2`
days=`get_mon_days $Y$M`
if ! [ $D -ge 1 -a $D -le $days ] ; then
FLAG=1
fi
return $FLAG
}
get_before_date()
{
Y=`expr substr $1 1 4`
M=`expr substr $1 5 2`
D=`expr substr $1 7 2`
YY=`expr $Y - 1`
MM=`expr $M - 1`
DD=`expr $D - 1`
MM=`printf "%02d" $MM`
DD=`printf "%02d" $DD`
dd=$Y$MM
dad=`get_mon_days $dd`
be_date=$Y$M$DD
if [ $D -eq 01 ]
then
if [ $M -ne 01 ]
then
be_date=$Y$MM$dad
fi
if [ $M -eq 01 ]
then
be_date=$YY"1231"
fi
fi
echo $be_date
}
get_next_date()
{
Y=`expr substr $1 1 4`
M=`expr substr $1 5 2`
D=`expr substr $1 7 2`
YY=`expr $Y + 1`
MM=`expr $M + 1`
DD=`expr $D + 1`
MM=`printf "%02d" $MM`
DD=`printf "%02d" $DD`
r1=`expr $Y \% 4`
r2=`expr $Y \% 100`
r3=`expr $Y \% 400`
# 通常情况
next_date=$Y$M$DD
# 特殊情况1,小月月末
if [ $D -eq 30 ]
then
case $M in
04|06|09|11) next_date=$Y$MM"01";;
esac
fi
# 特殊情况2,大月月末
if [ $D -eq 31 ]
then
next_date=$Y$MM"01"
case $M in
12) next_date=$YY"0101";;
esac
fi
# 特殊情况3,2月月末
if [ $M -eq 02 ]
then
# 闰年
if [ r1 -eq 0 -a r2 -ne 0 -o r3 -eq 0 ]
then
if [ $D -eq 29 ]
then
next_date=$Y$MM"01"
fi
else
if [ $D -eq 28 ]
then
next_date=$Y$MM"01"
fi
fi
fi
echo $next_date
}
format_date()
{
Y=`expr substr $1 1 4`
M=`expr substr $1 5 2`
D=`expr substr $1 7 2`
echo $Y"-"$M"-"$D
}
if [ $# -ne 1 ]
then
n_today=$(date -d "0 days ago" +%Y%m%d)
elif check_date $1
then
n_today=$1
else
n_today=$(date -d "0 days ago" +%Y%m%d)
fi
v_yesterday=$(format_date $(get_before_date $n_today))
v_today=$(format_date $n_today)
n_yesterday=$(get_before_date $n_today)
echo $n_yesterday
echo $n_today
echo $v_yesterday
echo $v_today
分享到:
相关推荐
在Shell编程中,正则表达式是一种非常强大的文本处理工具,可以用于模式匹配、文本搜索与替换等操作。它能够帮助我们更加灵活地处理各种字符串数据,是自动化脚本编写中的重要组成部分。 #### 正则表达式的分类与...
在计算机编程领域,shell脚本是一种使用Unix Shell语言编写的脚本程序,它被广泛应用于自动化任务处理、系统管理等领域。标题“shell脚本循环调度程序”表明这是一段用于循环执行特定任务的shell脚本代码。 #### 二...
1. **获取当前年月**:使用`date +%Y`和`date +%m-1|bc`分别获取当前年份和上一个月的月份。 2. **调整月份和年份**:如果月份小于1,则将月份设为12,并将年份减去1。 3. **计算当月天数**:使用`cal`命令获取指定...
1. **时间戳生成**:生成当前的年月日和小时信息。 2. **目录结构维护**:根据当前时间和日期创建日志存储目录。 3. **延迟执行**:设置延迟执行时间,避免资源过度消耗。 这些脚本不仅能够实时监控系统状态,还...
在此部分,学生需要编写一个Shell脚本,该脚本能接收用户输入的年月信息,然后显示相应的日历,同时显示当前日期和时间。实验中提到了三种执行脚本的方法: 1. 输入定向到脚本(`$bash),但由于输入命令错误,这种...
如果为空,创建`/root/bak`目录并进入(#2-#3),接着获取当前日期的年月日(#4),并基于这些日期信息创建压缩文件名(#5),最后将`/etc`目录打包并保存至`/root/bak`(#6)。整个程序的功能是创建一个名为`/root/...
- 在编写Shell脚本时,需要注意防止命令注入攻击,尤其是在处理外部输入的情况下。 - 对于敏感操作,如删除文件,应确保只针对指定的目标执行,避免误操作造成损失。 通过上述内容,我们可以了解到`crontab`和...
在Shell脚本中,`date +%Y%m%d%H%M`用于获取当前的年月日小时分钟格式的时间。脚本通过循环检查用户输入的密码,只有当输入与系统时间一致时才会跳出循环并显示成功信息。这个脚本展示了如何使用内建的命令读取用户...
在Shell脚本中进行日期计算是一种常见的需求,尤其是在处理时间序列数据、定时任务或者需要基于日期进行逻辑判断的场景下。给定的脚本主要涉及到了如何计算指定日期的前N天、后N天以及获取特定日期是星期几的功能。 ...
【实验三 Shell 脚本实验...通过这些实验,学生不仅能掌握Bash的基本操作,还能了解到如何处理用户输入、控制流程、调用系统命令以及进行简单的数据处理。这对于日常系统管理、自动化任务和脚本编写具有实际应用价值。
这里使用反引号括起来的date命令生成一个以年月日为名称的压缩包,防止文件覆盖。 4. **计划任务(Cron)**:通过crontab命令可以设置定时任务,实现周期性执行脚本。例如: ```bash 0 3 *** 5 /root/logbak.sh ...
- `^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$`:匹配年月日格式的日期。 - `/^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/`:匹配月日年格式的日期。 2. ...
标题中的“Julian-Date-Script”指的是一个用于转换日期的特定脚本,它能够将常用的年月日(YMD)格式的日期转换为儒略日期。儒略日期是一种连续的日期系统,从公元前4713年1月1日午夜开始计数,广泛应用于天文学和...
然而,在某些情况下,如在没有`date`命令的精简环境或者需要自定义时间处理逻辑时,我们可以使用内置的shell函数和算术运算来实现类似的功能。 首先,让我们了解shell中的时间单位。在shell中,我们通常使用秒作为...
`date+%y%m%d`格式化日期为年月日。`tar`命令可以用来创建压缩文件,但在这个例子中,具体的压缩命令未给出。 5. **查找含特定字符串的文件** 脚本接收两个参数,第二个参数是目录路径。它遍历目录中的所有文件,...
如果需要更详细的日期格式,如年月日,可以这样做: ```bash YEAR=`date +%Y年%m月%d日` TODAY=`date +%A` echo "今天是 $YEAR, $TODAY" ``` 从键盘获取用户的输入是与用户交互的基础。`read`命令可以读取用户输入...
4. **获取日期信息**:使用 `date` 命令获取年月日信息,并拼接成备份文件名。 5. **执行备份操作**:使用 `tar zcvf` 命令将 `/etc` 目录压缩为 `.tar.gz` 文件。 **应用场景**: - 定期备份系统关键配置文件,...
- `date +%F_%H-%M-%S`:获取当前日期时间格式为年月日_小时-分钟-秒。 - `[ ! -d $BACKUP_DB_DIR ] && mkdir -p $BACKUP_DB_DIR &>/dev/null`:检查备份目录是否存在,不存在则创建之,忽略输出。 ### 总结 以上...