Shell是什么shell
Shell是一种脚本语言,和传统语言C,Python...相比仍是比较简单的。数组
可使用逻辑判断,循环等语法bash
能够自定义函数
运维
shell是系统命令的集合ide
shell脚本能够实现自动化运维,能大大增长咱们的运维效率函数
Shell脚本结构和执行方法ui
1.开头必需要#!/bin/bash 解释器命令,下面的命令是经过哪个解释器执行的spa
咱们发现sh其实只是bash的软链接日志
[root@congji shell]# ll /bin/shorm
lrwxrwxrwx. 1 root root 4 10月 20 08:08 /bin/sh -> bash
[root@congji shell]# ll /bin/bash
-rwxr-xr-x. 1 root root 960392 8月 3 2016 /bin/bash
2.除过第一行,剩下以#开头的大多只是做为解释说明用
3.脚本的名字一般以.sh结尾,用于区分这是一个shell脚本。
4.执行方法有两种
(1)chmod +x 01.sh;./01.sh 先给脚本执行权限,而后用相对路径执行(由于$PATH里有/bin/的路径)
(2)bash 01.sh 或者 sh 01.sh
5.查看脚本执行过程
sh -x + 脚本 (每个+表示一个动做)
[root@congji shell]# sh -x 01.sh
+ echo renxinrui
renxinrui
+ ls
01.sh
6.查看脚本是否语法错误 bash -n 01.sh
(咱们为了看到实验效果,故意写一个错的脚本,在for循环的结尾少写一个done)
[root@congji shell]# cat 01.sh
#!/bin/bash
for i in `seq 1 10`
do
echo $i
[root@congji shell]# sh -n 01.sh
01.sh:行6: 语法错误: 未预期的文件结尾
它提示报错,那咱们加上done试试,
[root@congji shell]# sh -n 01.sh (执行后没有报错,也没有返回值)
[root@congji shell]# sh 01.sh
1
2
3
4
5
6
7
8
9
10
date命令用法
在shell里直接输入date,会显示时间信息。
[root@congji ~]# date
2018年 01月 11日 星期四 00:00:07 CST
那么加上参数他会怎么显示呢
[root@congji ~]# date +%Y (显示4位数年)
2018
[root@congji ~]# date +%y (显示2位数年)
18
[root@congji ~]# date +%m (显示月份)
01
[root@congji ~]# date +%d (显示日期)
11
[root@congji ~]# date +%Y%m%d (若是把他们综合在一块儿就会显示当前日期)
20180111
[root@congji ~]# date +%D (以月,日,年的方式显示时间)
01/11/18
[root@congji ~]# date +%F (以年-月-日的方式显示时间)
2018-01-11
既然有年月日,那就有分钟和小时
[root@congji ~]# date +%H (显示当前的小时)
00
[root@congji ~]# date +%M (显示当前的分钟)
20
[root@congji ~]# date +%S (显示当前多少秒)
36
[root@congji ~]# date +%s (这是一个时间戳,举例1970年1月1日0点过去了多少秒)
1515601302
咱们能够把全部的参数组合起来显示多少秒,也能够直接加T显示多少秒,用T显示的更为清楚
[root@congji ~]# date +%H%M%S
002910
[root@congji ~]# date +%T
00:29:16
把所有的参数组合起来:
[root@congji ~]# date +%Y-%m-%d/%H:%M:%S (为了更清晰的看到结果,咱们给中间加上了分隔符)
2018-01-11/00:35:58
[root@congji ~]# date +%F/%T (一样咱们用F和T也能显示出一样的效果)
2018-01-11/00:36:45
因此咱们得出结论
date +%Y-%m-%d = date +%F
date +/%H:%M:%S = date +%T
[root@congji ~]# date +%w (显示今天是周几)
4
[root@congji ~]# date +%W (显示今天是今年的第几周)
02
更直观的咱们能够用cal命令,像日历同样显示时间,会显示日期,只是这里复制不出来。
[root@congji ~]# 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
如今有一个实例,今天是1月11日,你要写一个切割日志脚本,在天天的0点切割日志,可是咱们都知道,一到0点,时间就会显示后一天。因此咱们要学会增长减小,咱们以减小为例。
[root@congji ~]# date
2018年 01月 11日 星期四 00:54:00 CST
[root@congji ~]# date -d "-1 day" (显示当前时间提早一天)
2018年 01月 10日 星期三 00:54:02 CST
[root@congji ~]# date -d "-1 month" (显示当前时间提早一小时)
2017年 12月 11日 星期一 00:54:12 CST
[root@congji ~]# date -d "-1 min" (显示当前时间提早一分钟)
2018年 01月 11日 星期四 00:53:19 CST
咱们知道显示时间戳是%s,那么如何让时间戳显示成日期呢?
[root@congji ~]# date +%s
1515603280
[root@congji ~]# date -d @1515603280
2018年 01月 11日 星期四 00:54:40 CST
Shell脚本中的变量
当脚本中使用某个字符串比较频繁,而且字符串长度很长时间,就应该使用变量代替,使脚本变的简单明了
使用条件语句时,尝试用变量 if[$a -gt 1];then...;fi
引用某个命令时,用变量替代 n='wc -l 1.txt'
写用户交互脚本时,变量也是必不可少的
内置变量$1,$2,$3...$0表示脚本自己,$1第一个参数,$2第二个,...$#表示参数个数
数学运算a=1;b=2;c=$(($a+$b))或者$[$a+$b]