C高级 SHELL day4 (计算日期是当年的第几天)

 

shell脚本的概念

  1. shell脚本是一个以.sh结尾的文件,例如 1.sh test.sh
  2. shell脚本中存储的是有序的,能够实现特定功能的shell指令集合。
  3. 除了shell指令,还有特定的语法:分支结构,循环结构,数组,函数等等.....

优点:

  1. 不需要编译,脚本语言不需要编译,不依赖任何编译工具。
  2. 避免开发人员反复进行重复步骤。
  3. 提高C代码编译效率,
    1. 可以利用编写的shell脚本(makefile),指定编译顺序,依赖关系。代码修改后直接执行脚本重新编译即可。
#! /bin/bash 
#计算日期是当年的第几天

read -p "输入年月日>>>" year mon day

if [ $((year%4)) -eq 0 -a $((year%100)) -ne 0 -o $((year%400)) -eq 0 ]
then 
	echo $year 是闰年
	flag=1
else
	echo $year 不是闰年
	flag=0
fi

echo $flag

ptr=0
prr=0


#用case

case $mon in
	1)
		prr=$day
		;;
	2)
		prr=$((day+31))
		;;
	3)
		prr=$((day+31+28))
		;;
	4)
		prr=$((day+31+28+31))
		;;
	5)
		prr=$((day+31+28+31+30))
		;;
	6)
		prr=$((day+31+28+31+30+31))
		;;
	7)
		prr=$((day+31+28+31+30+31+30))
		;;
	8)
		prr=$((day+31+28+31+30+31+30+31))
		;;
	9)
		prr=$((day+31+28+31+30+31+30+31+31))
		;;
	10)
		prr=$((day+31+28+31+30+31+30+31+31+30))
		;;
	11)
		prr=$((day+31+28+31+30+31+30+31+31+30+31))
		;;
	12)
		prr=$((day+31+28+31+30+31+30+31+31+30+31+30))
		;;
esac
if [ $flag -eq 1 ]
then

	if [ $mon -gt 2 ]
	then 
		((prr++))
	fi

fi


prr="$year年$mon月$day日 是 $year 第 $prr 天"


if [ $day -le 0 ]
then
	prr=日期输入有误
else
	case $mon in 
		1|3|5|7|8|10|12)
			if [ $day -gt 31 ] 
			then
				prr=日期输入有误
			fi
			;;
		4|6|9|11)
			if [ $day -gt 30 ]
			then
				prr=日期输入有误
			fi
			;;
		2)
			if [ $flag -eq 0 ]
			then
				if [ $day -gt 28 ]
				then
					prr=日期输入有误
				fi
			else
				if [ $day -gt 29 ]
				then
					prr=日期输入有误
				fi
			fi
			;;
		*)
			prr=月份输入有误
			;;
	esac


	echo $prr


	#用if



	if [ $mon -le 0 ]
	then 
		ptr=月份输入有误
	else

		if [ $mon -gt 1 ]
		then
			((ptr+=31))
		elif [ $mon -eq 1 ]
		then
			if [ $day -le 0 -o $day -gt 31 ]
			then
				ptr=日期输入有误
			else
				((ptr+=day))	
			fi

		fi


		if [ $mon -gt 2 ]
		then	
			if [ $flag -eq 0 ]
			then
				((ptr+='28'))
			else 
				((ptr+='29'))
			fi

		elif [ $mon -eq 2 ]
		then
			((ptr+=day))	
			if [ $flag -eq 0 ]
			then
				if [ $day -le 0 -o $day -gt 28 ]
				then
					ptr=日期输入有误
				fi
			else 
				if [ $day -le 0 -o $day -gt 29 ]
				then
					ptr=日期输入有误
				fi 
			fi
		fi


		if [ $mon -gt 3 ]
		then
			((ptr+='31'))
		elif [ $mon -eq 3 ]
		then
			if [ $day -le 0 -o $day -gt 31 ]
			then
				ptr=日期输入有误
			else
				((ptr+=day))	
			fi
		fi


		if [ $mon -gt 4 ]
		then
			((ptr+='30'))
		elif [ $mon -eq 4 ]
		then
			if [ $day -le 0 -o $day -gt 30 ]
			then
				ptr=日期输入有误
			else
				((ptr+=day))	
			fi
		fi


		if [ $mon -gt 5 ]
		then
			((ptr+='31'))
		elif [ $mon -eq 5 ]
		then
			if [ $day -le 0 -o $day -gt 31 ]
			then
				ptr=日期输入有误
			else
				((ptr+=day))	
			fi
		fi


		if [ $mon -gt 6 ]
		then
			((ptr+='30'))
		elif [ $mon -eq 6 ]
		then
			if [ $day -le 0 -o $day -gt 30 ]
			then
				ptr=日期输入有误
			else
				((ptr+=day))	
			fi
		fi


		if [ $mon -gt 7 ]
		then
			((ptr+='31'))
		elif [ $mon -eq 7 ]
		then
			if [ $day -le 0 -o $day -gt 31 ]
			then
				ptr=日期输入有误
			else
				((ptr+=day))	
			fi
		fi


		if [ $mon -gt 8 ]
		then
			((ptr+='31'))
		elif [ $mon -eq 8 ]
		then
			if [ $day -le 0 -o $day -gt 31 ]
			then
				ptr=日期输入有误
			else
				((ptr+=day))	
			fi
		fi


		if [ $mon -gt 9 ]
		then
			((ptr+='30'))
		elif [ $mon -eq 9 ]
		then
			if [ $day -le 0 -o $day -gt 30 ]
			then
				ptr=日期输入有误
			else
				((ptr+=day))	
			fi
		fi


		if [ $mon -gt 10 ]
		then
			((ptr+='31'))
		elif [ $mon -eq 10 ]
		then
			if [ $day -le 0 -o $day -gt 31 ]
			then
				ptr=日期输入有误
			else
				((ptr+=day))	
			fi
		fi


		if [ $mon -gt 11 ]
		then
			((ptr+='30'))
		elif [ $mon -eq 11 ]
		then
			if [ $day -le 0 -o $day -gt 30 ]
			then
				ptr=日期输入有误
			else
				((ptr+=day))	
			fi
		fi


		if [ $mon -gt 12 ]
		then
			ptr=月份输入有误
		elif [ $mon -eq 12 ] 
		then
			if [ $day -le 0 -o $day -gt 31 ]
			then 
				ptr=日期输入有误
			else
				((ptr+=day))	
			fi

		fi

	fi
fi
echo 是$ptr

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值