本文开始对shell脚本进行介绍,这里介绍了shell脚本的结构,以及如何执行shell脚本,另外介绍了date命令的用和shell中变量的作用。
shell脚本介绍
- shell是一种脚本语言,可以使用逻辑判断、循环等语法,并且可以自定义函数;
- shell是系统命令的集合,能够利用shell脚本实现自动化运维,可以大大增强运维效率;
- 将重复性的工作,使用shell编写成脚本,可以极大减少时间和提高效率。
shell脚本结构和执行
- 编写shell脚本时,文件的开头必须要写
#!/bin/bash
这条语句,其表示脚本是由哪个解释器来执行,如果没有开头的这句,那么执行脚本,就必须使用/bin/bash script.sh
这种指定解释器的方式运行脚本; - 以#开头的行为注释说明;
- 脚本的名字以.sh结尾,用于区分这是一个shell脚本;
- 执行方法有两种:
- 给脚本执行权限,用
./script.sh
的形式执行; - 使用
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
代替。
- 这里如果read后面没有写n,也可以使用
-
内置变量
$0
,$1
,$2
...,$0
表示脚本本身,$1
表示第一个参数,$2
表示第二个参数,以此类推; -
数学运算中,如
a=1;b=2;c=$(($a+$b))
或$[$a+$b]
;