20.1 shell脚本介绍php
20.2 shell脚本结构和执行mysql
20.3 date命令用法linux
20.4 shell脚本中的变量sql
20.1 shell脚本介绍:shell
~~1.shell是什么vim
shell是一种脚本语言 aming_linux blog.lishiming.net(shell的练习题)bash
#与传统的C语言、php语言相比,仍是很简单的运维
可使用逻辑判断、循环等语法ide
能够自定义函数函数
shell是系统命令的集合
#好比在凌晨三点的时候,去执行若干条命令。就能够把命令写入一个脚本,到点去执行就好了(批量的去执行这些命令)
shell脚本能够实现自动化运维,能大大增长咱们的运维效率
#好比批量的去安装系统,直接在机器上运行这个脚本就能够了
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
20.2 shell脚本结构和执行:
~1.开头须要加#!/bin/bash
#若是咱们在这台机器上可以执行添加的命令,就能够不用写这一行。若是换一台可能不能执行
~2.以#开头的行做为解释说明
#就是说,咱们接下来要执行的命令,是经过哪一个解释器来操做的。一般都是/bin/bash,说明咱们接下来须要运行的这些命令/语句,是经过/bin/bash这个解释器来执行的
~3.脚本的名字以.sh结尾,用于区分这是一个shell脚本
#也方便后期咱们去找
~4.执行方法有两种
chmod +x 1.sh; ./1.sh
#先给这个文件执行权限。咱们能够直接在目录下 ./1.sh 去执行(固然也能够写绝对路径、./是相对路径)
bash 1.sh #或者直接sh 1.sh
~5.查看脚本执行过程 bash -x 1.sh
#咱们只能sh -x 1.sh,就不能相对或绝对路径了
~6.查看脚本是否语法错误 bash -n 1.sh
#没有任何的输出就表明没有错
实例:
[root@axinlinux-01 ~]# vim /etc/init.d/network
#! /bin/bash #这一行就是文件头,表明bin/bash解释的
# #通常状况下,除了文件头的#,其余的都表明解释说明
# network Bring up/down networking
#
# chkconfig: 2345 10 90 #这个比较特殊。用来定义启动脚本的级别(2345)。10表明顺序,第10个启动,第90个关闭
# description: Activates/Deactivates all network interfaces configured to \ #这个是表明脚本的解释说明
#以上这两行 chkconfig与description必需要有。否则这个启动脚本没办法加入到chkconfig列表里面去。这个脚本属于特殊的脚本
如下剩下的#都表明解释说明
# start at boot time.
#
### BEGIN INIT INFO
# Provides: $network
# Should-Start: iptables ip6tables NetworkManager-wait-online NetworkManager $network-pre
# Short-Description: Bring up/down networking
# Description: Bring up/down networking
### END INIT INFO
~5.
[root@axinlinux-01 shell]# sh -x 01.sh
+ echo $'\342\200\234123\342\200\235' #每个+号表示一个操做,下面显示的是结果
“123”
+ w
22:21:04 up 20 min, 1 user, load average: 0.00, 0.02, 0.10
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.208.1 22:04 0.00s 3.20s 0.00s w
+ ls
01.sh
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
20.3 date命令用法:
date在shell当中做用很大。好比,针对某一个文件作更改。咱们天天去备份一个文件(一个mysql),最终生成一个.sql的文件。那么咱们能够针对这个sql文件加一个日期标记,这样就能够很清晰的额知道,备份的这个sql文件是哪一天生成的。
好比,咱们还能够给他标记星期几。好比周一叫1.sql,周二叫2.sql,那么一周下来。下一周的周一他就能够把以前上一周的1.sql给覆盖。这样咱们就不用手动的去删除这些文件了
~1.
date +%Y-%m-%d, date +%y-%m-%d 年月日
+%Y(year)表示2018,+%y表示18
+%m(month)表示月,+%M(minute)表示分钟
+%d(date)表示日期,+%D表示年月日
date +%Y%m%d
20180913
date +%F
2018-09-13
~2.
date +%H:%M:%S = date +%T 时间
+%H(hour)表示小时
+%M(minute)表示分钟
+%S(second)表示秒
+%T
22:48:12
~3.
date +%s 时间戳
距离1970-01-01-00-00到如今过去多少秒
~4.
date -d @1504620492
把具体的日期换算成时间戳:date +%s -d "2018-09-13 23:01:17"
把时间戳换算成具体的日期:date -d @1536850983
[root@axinlinux-01 shell]# date +%s
1536850933
[root@axinlinux-01 shell]# date +%s -d "2018-09-13 23:03:03"
1536850983
[root@axinlinux-01 shell]# date -d @1536850983
2018年 09月 13日 星期四 23:03:03 CST
以上是互相换算的方法
date -d "+1day" 一天后
date -d "-1 day" 一天前
#好比,咱们删除昨天的日志
[root@axinlinux-01 shell]# date -d "-1 day"
2018年 09月 12日 星期三 22:57:08 CST
[root@axinlinux-01 shell]# date -d "-1 day" +%F
2018-09-12
date -d "-1 month" 一月前
date -d "-1 min" 一分钟前
date +%w, date +%W 星期
+%w(week)表示周几
+%W表示今年的第几周
~5.cal #查看日历
[root@axinlinux-01 shell]# 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
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
20.4 shell脚本中的变量:
shell当中处处都会使用变量。
变量可理解为 一个变化的参数,一个数值,又或者一个字符串。咱们能够反复的去引用它,调用它
如下,为何状况下用到变量
~1.当脚本中使用某个字符串较频繁而且字符串长度很长时就应该使用变量代替
#好比脚本中常常用到的全局路径
~2.使用条件语句时,常使用变量 if [ $a -gt 1 ]; then ... ; fi
~3.引用某个命令的结果时,用变量替代 n=`wc -l 1.txt`
~4.写和用户交互的脚本时,变量也是必不可少的 read -p "Input a number: " n; echo $n 若是没写这个n,能够直接使用$REPLY
~5.内置变量 $0, $1, $2… $0表示脚本自己,$1 第一个参数,$2 第二个 .... $#表示参数个数
#好比脚本的名字叫1.sh,那么$0就表明1.sh
~6.数学运算a=1;b=2; c=$(($a+$b))或者$[$a+$b]