xywuyiba8 发表于 2018-8-20 07:16:29

20.1 shell脚本介绍 20.2 shell脚本结构和执行 20.3 date命令用法 20.4 shell脚本中的变量

- 20.1 shell脚本介绍  
- 20.2 shell脚本结构和执行
  
- 20.3 date命令用法
  
- 20.4 shell脚本中的变量
  
# 20.1 Shell脚本介绍
  
-shell是一种脚本语言关注aming_linuxblog.lishiming.net
  
-可以使用逻辑判断、循环等语法
  
-可以自定义函数
  
-shell是系统命令的集合
  
-shell脚本可以实现自动化运维,能大大增加我们的运维效率
  

  

  

  

  

  

  

  

  
# 20.2 Shell脚本结构和执行
  
- 开头需要加#!/bin/bahs//告诉系统,这个脚本是通过哪一个解释器来进行操作的
  
- 以#开头的行作为解释说明
  
- 脚本的名字以.sh结尾,用于区分这是一一个shell脚本
  
- 先创建一个shell目录
  
```
  
# clear
  
# mkdir shell
  
# cd shell/
  
# ls
  
# vi 01.sh
  

  
#!/bin/bash
  
echo "123"
  
w
  
ls
  
~
  

  
~
  
:wq
  
# vi 01.sh
  
```
  

  
- 执行方法有两种:
  
chmod +x 1.sh; ./1.sh
  
bash 1.sh, sh 1.sh
  
```
  
# sh 01.sh
  
123
  
21:07:19 up 5 min,2 users,load average: 0.04, 0.33, 0.20
  
USER   TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
  
root   tty1                      21:02    4:39   0.02s0.02s -bash
  
root   pts/0    192.168.202.1    21:03    7.00s0.03s0.01s w
  
01.sh
  
#
  
```
  
- 还有一种, 文件开头的意思就是意味着 接下来的命令是由这个文件来解析的。
  
```
  
# chmod a+x 01.sh
  
# ./01.sh
  
123
  
21:09:48 up 7 min,2 users,load average: 0.14, 0.23, 0.18
  
USER   TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
  
root   tty1                      21:02    7:08   0.02s0.02s -bash
  
root   pts/0    192.168.202.1    21:03    4.00s0.03s0.00s /bin/bash ./01.sh
  
01.sh
  
#
  
# cat 01.sh
  
#!/bin/bash
  
echo "123"
  
w
  
ls
  
#
  

  
```
  
- bin/bash 其实就是 bin/sh
  
```
  
# ls -l /bin/bash
  
-rwxr-xr-x. 1 root root 960392 8月   3 2016 /bin/bash
  
# ls -l /bin/sh
  
lrwxrwxrwx. 1 root root 4 10月5 22:18 /bin/sh -> bash
  
#
  

  
```
  

  
- 查看脚本执行过程,每个+表示一个步骤
  
```
  
# sh -x 01.sh
  
+ echo 123
  
123
  
+ w
  
21:17:01 up 14 min,2 users,load average: 0.02, 0.07, 0.12
  
USER   TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
  
root   tty1                      21:02   14:21   0.02s0.02s -bash
  
root   pts/0    192.168.202.1    21:03    5.00s0.05s0.00s sh -x 01.sh
  
+ ls
  
01.sh
  
#
  
```
  
- 也可以用 sh -n 查看脚本的语法是否正确
  
- 没有输出,表示没有错误
  

  
```
  
# sh -n 01.sh
  
#
  
```
  
- 修改一下文件测试一下错误
  
```
  
# sh -n 01.sh
  
# vi 01.sh
  

  
#!/bin/bash
  
echo "123"
  
w
  
ls
  
for i in `seq 1 10`
  
do
  
echo $i
  
~
  

  
~
  
~
  
:wq
  

  
```
  
- 再执行下sh -n 看下
  
```
  
# sh -n 01.sh
  
01.sh:行8: 语法错误: 未预期的文件结尾
  
#
  
```
  
- 改回来
  
```
  
# vi 01.sh
  

  
#!/bin/bash
  
echo "123"
  
w
  
ls
  
~
  
~
  
~
  

  
:wq
  
```
  
- 再监测就是没用问题
  
```
  
# sh -n 01.sh
  
#
  
```
  

  

  

  

  

  

  

  
# 20.3 date命令用法
  
- date在shell中用处非常大;对文件后缀增加一个时间,以便后期管理
  
- date +%Y-%m-%d, date+%y-%m-d 年月日
  
```
  
# date
  
2017年 11月 20日 星期一 22:01:01 CST
  
#
  
```
  
- m 月,M 分钟
  
```
  
# date
  
2017年 11月 20日 星期一 22:01:01 CST
  
# date +%Y
  
2017
  
# date +%y
  
17
  
# date +%m
  
11
  
# date +%M
  
27
  
#
  
```
  
- 日期 d大D
  
```
  
# date +%d
  
20
  
# date +%D
  
11/20/17
  
#
  
```
  
- 日期,年月日 date +%Y%m%d
  
```
  
# date +%Y%m%d
  
20171120
  
#
  
```
  
- 日期 date +%F
  
```
  
# date +%F
  
2017-11-20
  
#
  
```
  
- 小时 ,分 ,秒
  
- s 表示一个时间戳 表示 距离1970年1月1日0点0分到现在的 总共多少秒
  
```
  
# date +%H
  
22
  
# date +%s
  
1511188397
  
# date +%S
  
22
  
# date +%S
  
32
  
#
  
```
  
- 关于时间
  
- date +%T
  
- date +%H%M%S
  
```
  
# date +%T
  
22:35:38
  
# date +%H%M%S
  
223608
  
#
  
```
  
- h显示月份,
  
```
  
# date +%h
  
11月
  
#
  
```
  
- 先把语言改成英文
  
```
  
# LANG=en
  
# date +%h
  
Nov
  
#
  
```
  
- 加上冒号 date +%H:%M:%S 等同于date +%T
  
```
  
# date +%H:%M:%S
  
22:42:38
  
# date +%T
  
22:42:42
  
#
  
```
  
- 周
  
- w 周几
  
- W 今年的第几周
  
```
  
# date +%w
  
1
  
# date +%W
  
47
  
#
  
```
  
- 显示日历cal
  
```
  
# cal
  
    November 2017
  
Su Mo Tu We Th Fr Sa
  
          1234
  
56789 10 11
  
12 13 14 15 16 17 18
  
19 20 21 22 23 24 25
  
26 27 28 29 30
  

  
#
  
```
  
- date -d "+1 day" +%F 一天后
  
- date -d "-1 day" +%F一天前
  
- date -d "-1 month" +%F一个月前
  
- date -d "-1 min " +%F一分钟前
  

  
- date -d "-1 year " +%F 一年前
  

  
- 标记昨天的日期 date -d "-1 day"
  
```
  
# date
  
Mon Nov 20 23:07:38 CST 2017
  
# date -d "-1 day"
  
Sun Nov 19 23:07:46 CST 2017
  
#
  
# date -d "-1 day" +%F
  
2017-11-19
  
#
  

  
```
  
- 上个月 date -d "-1 month"
  
```
  
# date -d "-1 month" +%F
  
2017-10-20
  
#
  
```
  
- 上一年 date -d "-1 year"
  
```
  
# date -d "-1 year" +%F
  
2016-11-20
  
# date -d "-1 year"
  
Sun Nov 20 23:10:43 CST 2016
  
#
  
```
  
- 上一个小时date -d "-1 hour"
  
```
  
# date -d "-1 hour" +%T
  
22:11:43
  
#
  
```
  
- 时间戳 转换成具体的日期时间,也可以现在的时间转换成时间戳
  
```
  
# date +%s
  
1511190759
  
#
  

  
# date -d @1511190759
  
Mon Nov 20 23:12:39 CST 2017
  
#
  
# date +%s -d "2017-11-20 23:12:39"
  
1511190759
  
#
  
```
  

  

  

  

  

  

  

  

  
# 20.4 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]


页: [1]
查看完整版本: 20.1 shell脚本介绍 20.2 shell脚本结构和执行 20.3 date命令用法 20.4 shell脚本中的变量