shell编程(一)

shell编程(一)

evobot 750 2018-07-11

本文开始对shell脚本进行介绍,这里介绍了shell脚本的结构,以及如何执行shell脚本,另外介绍了date命令的用和shell中变量的作用。


shell脚本介绍

  • shell是一种脚本语言,可以使用逻辑判断、循环等语法,并且可以自定义函数;
  • shell是系统命令的集合,能够利用shell脚本实现自动化运维,可以大大增强运维效率;
  • 将重复性的工作,使用shell编写成脚本,可以极大减少时间和提高效率。

shell脚本结构和执行

  • 编写shell脚本时,文件的开头必须要写#!/bin/bash这条语句,其表示脚本是由哪个解释器来执行,如果没有开头的这句,那么执行脚本,就必须使用/bin/bash script.sh这种指定解释器的方式运行脚本;
  • 以#开头的行为注释说明;
  • 脚本的名字以.sh结尾,用于区分这是一个shell脚本;
  • 执行方法有两种:
    1. 给脚本执行权限,用./script.sh的形式执行;
    2. 使用bash script.sh的形式执行;
  • 使用bash -x script.sh能够输出详细的脚本执行过程;
  • sh -n script.sh用来检查shell脚本文件是否有错误;

date命令

  • date命令直接执行,会输出系统的日期和时间:

    $ date
    2018年 07月 11日 星期三 22:01:55 CST
    
    
  • date命令可以对日期进行格式化,如下:

    # %Y表示年,%m表示月,%d表示日
    $ date +%Y%m%d
    20180711
    
    $ date +%F
    2018-07-11
    
    # %H表示小时,%M表示分钟,%S表示秒
    $ date +%H:%M:%S
    22:24:43
    
    $ date +%T
    22:29:54
    
    # %s表示秒的时间戳,即距离1970年1月1日0点0分过了多少秒
    $ date +%s
    1531319157
    
    # %h表示月份,根据系统语言会输出中文或英文月份
    $ date +%h
    7月
    
    # %w表示周几,%W表示本周是所在年的第几周
    $ date +%w
    3
    $ date +%W
    28
    
    
  • cal命令可以输出日历,如下:

    [lux@evobot ~]$ cal
          七月 2018     
    日 一 二 三 四 五 六
     1  2  3  4  5  6  7
     8  9 10 11 12 13 14
    15 16 17 18 19 20 21
    22 23 24 25 26 27 28
    29 30 31
    
    
  • date命令同样也可以进行时间差的标记,如对当前时间减一天表示昨天的日期:

    $ date -d "-1 day"
    2018年 07月 10日 星期二 22:35:36 CST
    
    $ date -d "-1 day" +%F
    2018-07-10
    
    $ date -d "-1 month" +%F
    2018-06-11
    
    $ date -d "-1 year" +%F
    2017-07-11
    
    $ date -d "-1 hour" +%T
    21:37:14
    
    # 同样支持+号
    $ date -d "+1 hour" +%T
    23:37:49
    
    
  • 对于时间戳,可以将时间戳转化为日期,也可以将日期转化为时间戳:

    $ date +%s
    1531319981
    
    # 将时间戳转化为日期
    $ date -d @1531319981
    2018年 07月 11日 星期三 22:39:41 CST
    
    # 将指定日期转化为时间戳
    $ date +%s -d "2017-08-11 06:05:04"
    1502402704
    
    

shell脚本中的变量

  • 当脚本中使用某个字符串较频繁并且字符串长度很长时,就应该使用变量代替;

  • 在使用条件语句时,常使用变量,如:

    if [$a -gt 1];then ...; fi;
    
  • 引用某个命令的结果时,也可以使用变量代替,如:

    n=wc -l 1.txt
    
  • 在存在用户交互的脚本中,变量也是必不可少的,如:

    read -p "input a number:" n; echo $n
    
    • 这里如果read后面没有写n,也可以使用$REPLY代替。
  • 内置变量$0,$1,$2...,$0表示脚本本身,$1表示第一个参数,$2表示第二个参数,以此类推;

  • 数学运算中,如a=1;b=2;c=$(($a+$b))$[$a+$b]



# Shell