zoukankan      html  css  js  c++  java
  • 一个简单脚本

    计算自己还有几天过生日

     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的一些问题。

  • 相关阅读:
    java反射详解
    Oracle创建视图权限不足(解决)
    SQL Server为啥使用了这么多内存?
    在cmd中运行android.bat报出空指针异常
    QTP生成随机数字+字母
    loadView和ViewDidLoad区别
    Bonjour(苹果电脑公司的服务器搜索协议商标名)
    |= 或赋值
    我见过的类
    UML 继承和接口实现
  • 原文地址:https://www.cnblogs.com/Tattoo-Welkin/p/10335346.html
Copyright © 2011-2022 走看看