shell脚本的概念
- shell脚本是一个以.sh结尾的文件,例如 1.sh test.sh
- shell脚本中存储的是有序的,能够实现特定功能的shell指令集合。
- 除了shell指令,还有特定的语法:分支结构,循环结构,数组,函数等等.....
优点:
- 不需要编译,脚本语言不需要编译,不依赖任何编译工具。
- 避免开发人员反复进行重复步骤。
- 提高C代码编译效率,
- 可以利用编写的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