一个简单脚本

计算自己还有几天过生日

 1  #!/bin/bash 
 2  echo  -e  "I will calculate you brithday .Please input you brithday(MMDD)" 
 3  read  brithday
 4  brithday_temp=$(echo $brithday | grep '[0-9]{4}')
 5  if [ "$brithday_temp"  ==  "" ]  ; then
 6      echo "You input is wrong !!"
 7      exit 0 
 8  fi
 9  now=$(date +%m%d)
 10 if [ "$brithday"  ==  "$now"   ] ; then 
 11     echo "Today is your brithday "
 12 elif [ "$brithday"   -gt   "$now"   ]   ;  then 
 13     year=$(date +%Y)
 14     brithday_second=$(date  --date="$year$brithday" +%s)
 15     now_second=$(date +%s)
 16     brithday_days_temp=$(($brithday_second - $now_second))
 17     brithday_days=$(($brithday_days_temp/60/60/24))
 18     echo "your brithday have $brithday_days days "
 19 else 
 20     year=$(( `date +%Y` + 1))
 21     brithday_second=$(date --date="$year$brithday" +%s)
 22     now_second=$(date +%s)
 23     brithday_days_temp=$(($brithday_second-$now_second))
 24     brithday_days=$(($brithday_days_temp/60/60/24))
 25     echo "your brithday have $brithday_days days "
 26 fi
 27 exit 0

执行结果:
这里写图片描述

这里写图片描述

这里写图片描述

设计思路:

1.生日的计算无关于年份,只在乎月份和日期,因此我们让用户只输入月份和日期。

2.进行检测看看是否有四个数字,如果没有就跳出。

3.比较结果有三种情况:

  1.等于now(即今天),输出Today is your brithday ,结束。
  2.大于now,计算生日那天到标准时间(即1970年1月1日)所经历的秒数,再计算今天到标准时间所经历的秒数,两数相减再进行转换既得天数,结束。
  3.小于now,给年份加1,计算同上,结束。

注意事项:

1.echo -e (-e 选项可以激活转义字符。如: , 等)

2.grep '[0-9]\{4\}' (正则表达式的用法,自行查阅)

3.if [ "$brithday_temp" == "" ] ; then

    1.[ ]中括号内的东西都要用空格来分隔,“一句话--疯狂空格”   
    2.不论变量或者是常量,一律用双引号括起来
    3.if与[] 不可以连起来写,但[] 可以与后面的内容连起来写(不建议这样操作)。如图:

这里写图片描述

   4.等于号一律用 ==  (PS:在bash中,= 和 == 号作用一样)

4. $( ) 与` ` (反单引号) 内的命令可以提前被执行(建议使用$( ) )

5.elif [ "$brithday" -gt "$now" ] ; then

1.-gt:大于(Greater than)
2.-lt:小于(lesser than)
3.-eq:等于(equal)
4.-ge:大于等于(Greater or equal)
ps:以上都可以用人用的<,>,== 来替换

6. brithday_days=$(($brithday_days_temp/60/60/24))(计算东西时,就用“ $ ( ( 运算内容 ) ) ”来进行计算)

7.变量设置的三个常见问题 :

 1.变量的设置以一个 = (等于号)来进行设置
 2.= 两边不能有空格(是初学者常犯的问题)!!!
 3.只能是英文和数字,且开头不能是数字

8.单引号与双引号的问题:

1.单引号内的东西是什么就是什么,仅为一般字符
2.双引号内的东西代表的是什么就是什么,保留原有属性

9.脚本的追踪与调试:

 1.sh -n ***.sh   检测是否有语法问题,若没有,什么也不输出
 2.sh -x ***.sh   将脚本执行过程列出来(等价于gdb 中的step 命令了)。如图:(+号后面的就是命令串)

这里写图片描述

特殊提示: 脚本出错,还是先检查关于空格的问题吧!!!

写在最后:下一篇介绍一下SElinux的一些问题。

原文地址:https://www.cnblogs.com/Tattoo-Welkin/p/10335346.html