码迷,mamicode.com
首页 > 系统相关 > 详细

Shell脚本(脚本结构和执行方法,date命令用法,脚本中的变量)

时间:2018-02-06 14:59:56      阅读:266      评论:0      收藏:0      [点我收藏+]

标签:语言   space   区分   一起   系统命令   通过   $0   txt   当前时间   

Shell是什么

Shell是一种脚本语言,和传统语言C,Python...相比还是比较简单的。

可以使用逻辑判断,循环等语法

可以自定义函数

shell是系统命令的集合

shell脚本可以实现自动化运维,能大大增加我们的运维效率


Shell脚本结构和执行方法

1.开头必须要#!/bin/bash  解释器命令,下面的命令是通过哪一个解释器执行的


我们发现sh其实只是bash的软连接

[root@congji shell]# ll /bin/sh

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]


Shell脚本(脚本结构和执行方法,date命令用法,脚本中的变量)

标签:语言   space   区分   一起   系统命令   通过   $0   txt   当前时间   

原文地址:http://blog.51cto.com/13407306/2069395

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!