目录
一、shell脚本介绍
二、shell脚本结构和执行
三、date命令用法
四、shell脚本中的变量
一、shell脚本介绍
- shell是一种脚本语言 aming_linux blog.lishiming.net
- 可以使用逻辑判断、循环等语法
- 可以自定义函数
- shell是系统命令的集合
- shell脚本可以实现自动化运维,能大大增加我们的运维效率
二、shell脚本结构和执行
shell脚本以#!/bin/bash开头
它作用是告诉系统接下来的命令是由解释器/bin/bash执行的。如果不设置该行,shell脚本也可以执行,但这是不符合规范的。以#开头的行作为解释说明
#表示注释,后面跟一些该脚本的相关注释内容,以及作者、创建日期或者版本等。除了第一行的#!/bin/bash,其余以#开头的行的内容将被认为是注释,不会被解释器执行。脚本的名字以.sh结尾
用于区分这是一个shell脚本hell脚本两种执行方法
- bash/sh 1.sh
[root@minglinux-01 /usr/local/sbin] bash 1.sh
22:19:56 up 1 day, 4:39, 1 user, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/2 192.168.162.1 19:54 4.00s 0.05s 0.00s bash 1.sh
[root@minglinux-01 /usr/local/sbin] sh 1.sh
22:20:27 up 1 day, 4:39, 1 user, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/2 192.168.162.1 19:54 3.00s 0.05s 0.00s sh 1.sh
- ./1.sh
[root@minglinux-01 /usr/local/sbin] ./1.sh
-bash: ./1.sh: 权限不够
[root@minglinux-01 /usr/local/sbin] chmod +x 1.sh
[root@minglinux-01 /usr/local/sbin] ./1.sh
22:21:48 up 1 day, 4:40, 1 user, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/2 192.168.162.1 19:54 4.00s 0.07s 0.00s w
#使用该方法运行shell脚本的前提是脚本本身有执行权限,所以需要给脚本加一个x权限。
- 查看脚本执行过程
#使用sh命令执行一个shell脚本时,可以加-x选项来查看这个脚本的执行过程
#这样有利于我们调试这个脚本,如下所示:
[root@minglinux-01 /usr/local/sbin] sh -x 1.sh
+ w
22:24:41 up 1 day, 4:43, 1 user, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/2 192.168.162.1 19:54 1.00s 0.09s 0.00s sh -x 1.sh
- 检查脚本是否有错
#使用sh命令执行一个shell脚本时,加-n选项可以检查脚本是否有错,没有任何输出则为正确
三、date命令用法
date命令是y用于显示或设置系统时间与日期。
[root@minglinux-01 /usr/local/sbin] date //默认显示当前时间
2018年 12月 29日 星期六 23:10:18 CST
- 格式化输出:
## 固定格式: date "+" 时间变量,date命令和+之间用空格分隔
date +%Y:表示以四位数字格式打印年份。
date +%y:表示以两位数字格式打印年份。
date +%m:表示月份。
date +%d:表示日期。
date +%H:表示小时。
date +%M:表示分钟。
date +%S:表示秒。
date +%F = %Y-%m-%d
date + %T = %H:%M:%S
date +%w:表示星期。结果显示0则表示周日。
date +%W:表示这一周是这一年的第几周
date +%s 表示时间戳,指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的秒数。
- 部分示例如下:
[root@minglinux-01 /usr/local/sbin] date +%Y
2018
[root@minglinux-01 /usr/local/sbin] date +%d
29
[root@minglinux-01 /usr/local/sbin] date +%Y%m%d
20181229
[root@minglinux-01 /usr/local/sbin] date +%F
2018-12-29
[root@minglinux-01 /usr/local/sbin] date +%y%m%d%H%M%S
181229232609
[root@minglinux-01 /usr/local/sbin] date +"%Y-%m-%d %H:%M:%S"
2018-12-29 23:29:47
[root@minglinux-01 /usr/local/sbin] date +%w
6
[root@minglinux-01 /usr/local/sbin] date +%s
1546097199
#日历
[root@minglinux-01 /usr/local/sbin] 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 -d<字符串>:显示字符串所指的日期与时间。字符串前后必须加上双引号
#
# date -d "+1 day" 一天后
[root@minglinux-01 /usr/local/sbin] date -d "+1day"
2018年 12月 30日 星期日 23:33:03 CST
# date -d "-1 day" 一天前
[root@minglinux-01 /usr/local/sbin] date -d "-1 day"
2018年 12月 28日 星期五 23:33:23 CST
# date -d "-1 month" 一月前
[root@minglinux-01 /usr/local/sbin] date -d "-1 month"
2018年 11月 29日 星期四 23:33:36 CST
# date -d "-1 min" 一分钟前
[root@minglinux-01 /usr/local/sbin] date -d "-1 min"
2018年 12月 29日 星期六 23:32:43 CST
[root@minglinux-01 /usr/local/sbin] date -d "-1 min" +%T
23:36:47
# date -d "+1 year" 一年后
[root@minglinux-01 /usr/local/sbin] date -d "+1 year"
2019年 12月 29日 星期日 23:35:47 CST
# date -d "-1 years" 一年前
[root@minglinux-01 /usr/local/sbin] date -d "-1 years"
2017年 12月 29日 星期五 23:35:54 CST
- 时间戳
[root@minglinux-01 /usr/local/sbin] date +%s
1546098022
#由时间戳推出当前时间
[root@minglinux-01 /usr/local/sbin] date -d @1546098022
2018年 12月 29日 星期六 23:40:22 CST
#由当前时间换算时间戳
[root@minglinux-01 /usr/local/sbin] date +%s -d "2018-12-29 23:40:22"
1546098022
四、shell脚本中的变量
当脚本中使用某个字符串较频繁并且字符串长度很长时就应该使用变量代替。
定义变量的格式为:“变量名=变量的值”。
在脚本中引用变量时需要加上符号$。
[root@minglinux-01 /usr/local/sbin] a="元旦"
[root@minglinux-01 /usr/local/sbin] b="快乐"
[root@minglinux-01 /usr/local/sbin] echo $a$b
元旦快乐
- 使用条件语句时,常使用变量
[root@minglinux-01 /usr/local/sbin] a=2
[root@minglinux-01 /usr/local/sbin] if [ $a -gt 1 ];then echo $b;fi
快乐
- 引用某个命令的结果时,用变量替代
[root@minglinux-01 /usr/local/sbin] n=`wc -l 1.sh`
[root@minglinux-01 /usr/local/sbin] echo $n
2 1.sh
- 写和用户交互的脚本时,变量也是必不可少的
[root@minglinux-01 /usr/local/sbin] read -p "Please input a number:" n
Please input a number:10
[root@minglinux-01 /usr/local/sbin] echo $n
10
#如果没写这个n,可以直接使用$REPLY
[root@minglinux-01 /usr/local/sbin] read -p "Please input a number:"
Please input a number:12
[root@minglinux-01 /usr/local/sbin] echo $REPLY
12
- 内置变量
$0,$1,$2…
$0表示脚本本身,$1 第一个参数,$2 第二个 ....
$#表示参数个数
$@ 表示所有参数
[root@minglinux-01 /usr/local/sbin] vim 1.sh
#脚本内容如下:
1 #!/bin/bash
2 echo "$0"
3 echo "$1"
4 echo "$2"
5 echo "$#"
6 echo "$@"
~
[root@minglinux-01 /usr/local/sbin] sh 1.sh 1 2 3
1.sh
1
2
3
1 2 3
- 数学运算也会用到变量
[root@minglinux-01 /usr/local/sbin] a=1;b=2;c=$(($a+$b))
[root@minglinux-01 /usr/local/sbin] echo $c
3
[root@minglinux-01 /usr/local/sbin] a=2;b=3;c=$[$a+$b]
[root@minglinux-01 /usr/local/sbin] echo $c
5