linux 学习笔记-068-Shell 编程-Shell 脚本介绍及其结构和执行方法,date 命令用法,shell 脚本中的变量

发布于 2018-04-17  161 次阅读


Shell 脚本介绍

首先,先明白一个问题,shell 是什么?

shell 是一种脚本语言

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

可以自定义函数

shell 是系统命令的集合

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

Shell 脚本结构和执行

开头需要加#!/bin/bash

以#开头的行作为解释说明

脚本的名字以.sh 结尾,用于区分这是一个 shell 脚本

执行方法有两种

chmod +x 1.sh; ./1.sh

bash 1.sh

查看脚本执行过程 bash -x 1.sh

查看脚本是否语法错误  bash -n 1.sh

举例子

01:

约定开头必须添加"#!/bin/bash",这个的意思是,告诉该机器,这个脚本接下来要运行的命令是通过哪个解析器解析的

其实如果是在本机运行,是可以不添加"#!/bin/bash"的,不过为了养成好习惯,还是添加"#!/bin/bash"吧

shell 脚本通常使用".sh"结尾,这是为了让人知道,这是一个 shell 脚本(linux 中没有后缀名的说法,在 linux 中,后缀名只是为了容易区分这个文件是一个什么文件)

[root@am-01:~#] mkdir shell

[root@am-01:~#] cd shell/

[root@am-01:~/shell#] vim 1.sh

#!/bin/bash

w

[root@am-01:~/shell#] bash 1.sh

 00:22:40 up 5 days, 18:10,  1 user,  load average: 0.01, 0.02, 0.05

USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT

root     pts/0    172.17.1.1       四 18    0.00s  1.58s  0.10s w

02:

给予脚本执行权限,使用"./"方法运行脚本

[root@am-01:~/shell#] chmod a+x 1.sh

[root@am-01:~/shell#] ./1.sh

 00:27:04 up 5 days, 18:14,  1 user,  load average: 0.02, 0.03, 0.05

USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT

root     pts/0    172.17.1.1       四 18    0.00s  1.52s  0.00s /bin/bash ./1.sh

03:

"#!/bin/bash"之后的"#"号开头的语句,一般情况下均代表注释

[root@am-01:~/shell#] vim 1.sh

#!/bin/bash

#这是一个测试脚本

w

[root@am-01:~/shell#] ./1.sh

 00:29:21 up 5 days, 18:16,  1 user,  load average: 0.00, 0.02, 0.05

USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT

root     pts/0    172.17.1.1       四 18    1.00s  1.52s  0.00s /bin/bash ./1.sh

04:

某些脚本,会有特殊作用的"#"号开头的语句,如/etc/init.d/network 这个脚本,有两句"#"号开头的语句是必须要有的,要不然脚本会出错,不生效,这个得注意下

[root@am-01:~/shell#] vim /etc/init.d/network

# chkconfig: 2345 10 90

# description: Activates/Deactivates all network interfaces configured to \

#              start at boot time.

05:

查看脚本执行过程"bash -x 1.sh",每一个"+"号代表一次执行动作

[root@am-01:~/shell#] vim 1.sh

#!/bin/bash

#这是一个测试脚本

w

echo "123"

date

[root@am-01:~/shell#] sh -x 1.sh

+ w

 00:36:47 up 5 days, 18:24,  1 user,  load average: 0.13, 0.07, 0.06

USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT

root     pts/0    172.17.1.1       四 18    7.00s  1.57s  0.01s w

+ echo 123

123

+ date

2018 年 04 月 17 日 星期二 00:36:47 CST

06:

查看脚本是否语法错误"bash -n 1.sh",无输出为正确,有输出会提示错误

[root@am-01:~/shell#] sh -n 1.sh    //无输出

[root@am-01:~/shell#] vim 1.sh    //增加一句"if(123)"

#!/bin/bash

#这是一个测试脚本

w

echo "123"

date

if(123)

[root@am-01:~/shell#] sh -n 1.sh

1.sh:行 7: 语法错误: 未预期的文件结尾

date 命令用法

date 命令在 shell 中作用很大,如对某个文件进行操作,并加上一个时间标志,这种情况一般用在定时备份文件的时候

如,每天晚上 11 点对 1.log 进行备份,并加上当天的时间标志

0 23 * * * /bin/cp 1.log 1.log.`date '+%Y%m%d'`

date 命令详解

date  +%Y-%m-%d, date +%y-%m-%d:年月日

date +%F:年-月-日

date  +%H:%M:%S = date +%T:时间

date +%s:时间戳,距离 1970 年 1 月 1 日 0 点 0 分到现在过去了多少秒

date +%h:月份

date -d @1504620492:把时间戳换算为具体时间

date +%s -d "2017-04-16 17:10:13":把具体时间换算为时间戳

date -d "+1day":一天后

date -d "-1 day":一天前

date -d "-1 month": 一月前

date -d "-1 years":一年前

date -d "-1 min":一分钟前

date +%w, date +%W:星期

Shell 脚本中的变量

当脚本中使用某个字符串较频繁并且字符串长度很长时就应该使用变量代替

使用条件语句时,常使用变量 if [ $a -gt 1 ]; then ... ; fi

引用某个命令的结果时,用变量替代 n=`wc -l 1.txt`

写和用户交互的脚本时,变量也是必不可少的 read -p "Input a number: " n; echo $n,如果没写这个 n,可以直接使用$REPLY

内置变量 $0, $1, $2…,$0 表示脚本本身,$1 第一个参数,$2 第二个 ....,$#表示参数个数

数学运算 a=1;b=2; c=$(($a+$b))或者$[$a+$b]