1、shell脚本介绍
shell脚本要想写好,必须经过不断地去练习写才能写好,没有捷径
要在咱们拿到一个需求的时候有一个脚本的大体思路,想到需求怎么去实现
shell脚本能够大大提升咱们的工做效率
2、shell脚本结构和执行
[root@linux-01 ~]# mkdir shell //建立一个shell文件夹,存放实验的shell脚本
[root@linux-01 ~]# cd shell/
[root@linux-01 shell]# ls
[root@linux-01 shell]# vi 01.sh //建立第一个脚本01.sh
#!/bin/bash
echo "123"
w
ls
//第一行必须这样写成这样的格式,若是这个脚本在本机上执行,第一行能够省略不写,可是若是也要在其余机器上执行,就必需要写了,咱们必须指定接下来的这些命令是经过哪个解释器来操做的
[root@linux-01 shell]# sh 01.sh //运行下01.sh脚本,能够正常执行
123
00:00:46 up 2:35, 1 user, load average: 0.14, 0.06, 0.06
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.238.1 23:37 6.00s 0.20s 0.02s w
01.sh
也能够给01.sh脚本执行的权限
[root@linux-01 shell]# chmod a+x 01.sh
[root@linux-01 shell]# ./01.sh //直接使用./来执行脚本,能执行说明这些命令被解析了,被认识了
123
00:02:33 up 2:37, 1 user, load average: 0.02, 0.04, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.238.1 23:37 1.00s 0.23s 0.01s w
01.sh
在脚本第二行再写一行#!/bin/bash就被识别为解释语句了
#!/bin/bash
#written by aming //解释
#2018-07-13 //解释
#echo w ls //解释
echo "123"
w
ls
[root@linux-01 shell]# vi /etc/init.d/network //查看下系统里面的network脚本
#! /bin/bash
#
#network Bring up/down networking
#
#chkconfig: 2345 10 90 //这个有特殊意义,2345是定义它的启动级别,10是启动顺序,90是关闭的顺序
#description: Activates/Deactivates all network interfaces configured to \ //针对脚本的解释说明
#start at boot time. //若是没有这两行,没有办法加入到chkconfig列表里面去
以#开头的行做为解释说明,能够写版权,写日期,解释脚本作什么用的等等
脚本的名称以.sh结尾,用于区分这是一个shell脚本
执行shell脚本的两种方法;
一、bash 01.sh 或者 sh 01.sh
二、chmod +x 01.sh ,而后使用./01.sh ,./是相对路径,也能够直接写绝对路径找到这个脚本直接执行也能够# /root/shell/01.sh来执行01.sh脚本
sh -x 01.sh ,其中-x选项是显示shell脚本执行的过程,每个+表示一个操做
[root@linux-01 shell]# sh -x 01.shlinux
3、date命令用法
date在shell中做用很大,好比在一个脚本中标记一个日志,或者针对某一个文件作更改,可使用date给它作一些装饰,好比天天备份一个sql文件,加上日期,就能够知道sql文件是哪一天生成的。
也能够按照周生成备份文件,好比周一辈子成1.sql,周二生成2.sql以此类推,每周生成7个备份文件,下周再生成新的1.sql文件上自动把上周备份的1.sql文件覆盖掉,不须要咱们手动去删除备份文件了,它能够自动去覆盖名字相同的文件,因此date在shell中很是有用,实用。
[root@linux-01 ~]# date +%Y //使用%Y表示四位数的年份
2018
[root@linux-01 ~]# date +%y //使用%y表示两位数的年份
18
[root@linux-01 ~]# date +%m //使用%m表示月份
07
[root@linux-01 ~]# date +%M //使用%M表示分钟
53
[root@linux-01 ~]# date +%d //使用%d表示日期
14
[root@linux-01 ~]# date +%D //使用%D表示月/日/年 这样格式的年月日
07/14/18
[root@linux-01 ~]# date +%Y%m%d //把%Y%m%d组合起来使用表示的就是年月日
20180714
[root@linux-01 ~]# date +%F //使用%F表示带横杠的年月日,显示的更友好
2018-07-14
[root@linux-01 ~]# date +%H //使用%H表示小时
15
[root@linux-01 ~]# date +%S //使用%S表示秒
07
[root@linux-01 ~]# date +%s //使用%s表示时间戳,距离1970年1月1日0点0分到如今过去了多少秒
1531551793
[root@linux-01 ~]# date +%T //使用%T表示时间
16:23:53
[root@linux-01 ~]# date +%H%M%S //使用%H%M%S表示时分秒
162715
[root@linux-01 ~]# date +%H:%M:%S //中间加上冒号显示的更友好,等同于%T
16:27:28
[root@linux-01 ~]# date +%w //使用%w表示周几
6
[root@linux-01 ~]# date +%W //使用%W表示今天是今年的第多少周
28
[root@linux-01 ~]# cal //cal命令能够显示日历
July 2018
Su Mo Tu We Th Fr Sa
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
好比在nginx切割日志的时候,它会在天天的凌晨0点钟去切割前一天的日志,这时候须要标注的日期是前一天的日期,这时候可使用date 标记昨天的日期:
[root@linux-01 ~]# date -d "-1 day" //这样就显示了昨天的日期
Fri Jul 13 16:40:59 CST 2018
[root@linux-01 ~]# date -d "-1 day" +%F //加上%F更友好的显示年月日
2018-07-13
[root@linux-01 ~]# date -d "-1 month" +%F //使用month表示上个月,一月前
2018-06-14
[root@linux-01 ~]# date -d "-1 years" +%F //使用years表示上一年,一样的day和month均可以加s
2017-07-14
[root@linux-01 ~]# date -d "-1 year" +%F //使用year效果同样
2017-07-14
[root@linux-01 ~]# date -d "-1 hour" +%T //使用hour表示时一小时前
15:48:44
[root@linux-01 ~]# date -d "-1 min" +%T //使用min表示一分钟前,秒也是能够这样表示的
16:51:13
[root@linux-01 ~]# date +%s -d "2018-07-14 16:55:23" //把具体的时间换算成时间戳
1531558523
[root@linux-01 ~]# date -d @1531558523 //反过来也能够把时间戳换算成具体的时间
Sat Jul 14 16:55:23 CST 2018nginx
4、shell脚本中的变量
shell脚本中处处都是使用变量的,简单讲,变量其实就是一个变化的参数,一个数值,一个字符串,能够反复使用它,调用它sql