- 20.1 shell脚本介绍 - 20.2 shell脚本结构和执行 - 20.3 date命令用法 - 20.4 shell脚本中的变量 # 20.1 Shell脚本介绍 - shell是一种脚本语言 关注aming_linux blog.lishiming.net - 可以使用逻辑判断、循环等语法 - 可以自定义函数 - shell是系统命令的集合 - shell脚本可以实现自动化运维,能大大增加我们的运维效率 # 20.2 Shell脚本结构和执行 - 开头需要加#!/bin/bahs //告诉系统,这个脚本是通过哪一个解释器来进行操作的 - 以#开头的行作为解释说明 - 脚本的名字以.sh结尾,用于区分这是一一个shell脚本 - 先创建一个shell目录 ``` [[email protected] ~]# clear [[email protected] ~]# mkdir shell [[email protected] ~]# cd shell/ [[email protected] shell]# ls [[email protected] shell]# vi 01.sh #!/bin/bash echo "123" w ls ~ ~ :wq [[email protected] shell]# vi 01.sh ``` - 执行方法有两种: chmod +x 1.sh; ./1.sh bash 1.sh , sh 1.sh ``` [[email protected] shell]# sh 01.sh 123 21:07:19 up 5 min, 2 users, load average: 0.04, 0.33, 0.20 USER TTY FROM [email protected] IDLE JCPU PCPU WHAT root tty1 21:02 4:39 0.02s 0.02s -bash root pts/0 192.168.202.1 21:03 7.00s 0.03s 0.01s w 01.sh [[email protected] shell]# ``` - 还有一种, 文件开头的意思就是意味着 接下来的命令是由这个文件来解析的。 ``` [[email protected] shell]# chmod a+x 01.sh [[email protected] shell]# ./01.sh 123 21:09:48 up 7 min, 2 users, load average: 0.14, 0.23, 0.18 USER TTY FROM [email protected] IDLE JCPU PCPU WHAT root tty1 21:02 7:08 0.02s 0.02s -bash root pts/0 192.168.202.1 21:03 4.00s 0.03s 0.00s /bin/bash ./01.sh 01.sh [[email protected] shell]# [[email protected] shell]# cat 01.sh #!/bin/bash echo "123" w ls [[email protected] shell]# ``` - bin/bash 其实就是 bin/sh ``` [[email protected] shell]# ls -l /bin/bash -rwxr-xr-x. 1 root root 960392 8月 3 2016 /bin/bash [[email protected] shell]# ls -l /bin/sh lrwxrwxrwx. 1 root root 4 10月 5 22:18 /bin/sh -> bash [[email protected] shell]# ``` - 查看脚本执行过程,每个+表示一个步骤 ``` [[email protected] shell]# 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 [email protected] IDLE JCPU PCPU WHAT root tty1 21:02 14:21 0.02s 0.02s -bash root pts/0 192.168.202.1 21:03 5.00s 0.05s 0.00s sh -x 01.sh + ls 01.sh [[email protected] shell]# ``` - 也可以用 sh -n 查看脚本的语法是否正确 - 没有输出,表示没有错误 ``` [[email protected] shell]# sh -n 01.sh [[email protected] shell]# ``` - 修改一下文件测试一下错误 ``` [[email protected] shell]# sh -n 01.sh [[email protected] shell]# vi 01.sh #!/bin/bash echo "123" w ls for i in `seq 1 10` do echo $i ~ ~ ~ :wq ``` - 再执行下sh -n 看下 ``` [[email protected] shell]# sh -n 01.sh 01.sh:行8: 语法错误: 未预期的文件结尾 [[email protected] shell]# ``` - 改回来 ``` [[email protected] shell]# vi 01.sh #!/bin/bash echo "123" w ls ~ ~ ~ :wq ``` - 再监测就是没用问题 ``` [[email protected] shell]# sh -n 01.sh [[email protected] shell]# ``` # 20.3 date命令用法 - date 在shell中用处非常大;对文件后缀增加一个时间,以便后期管理 - date +%Y-%m-%d, date+%y-%m-d 年月日 ``` [[email protected] ~]# date 2017年 11月 20日 星期一 22:01:01 CST [[email protected] ~]# ``` - m 月,M 分钟 ``` [[email protected] ~]# date 2017年 11月 20日 星期一 22:01:01 CST [[email protected] ~]# date +%Y 2017 [[email protected] ~]# date +%y 17 [[email protected] ~]# date +%m 11 [[email protected] ~]# date +%M 27 [[email protected] ~]# ``` - 日期 d 大D ``` [[email protected] ~]# date +%d 20 [[email protected] ~]# date +%D 11/20/17 [[email protected] ~]# ``` - 日期,年月日 date +%Y%m%d ``` [[email protected] ~]# date +%Y%m%d 20171120 [[email protected] ~]# ``` - 日期 date +%F ``` [[email protected] ~]# date +%F 2017-11-20 [[email protected] ~]# ``` - 小时 ,分 ,秒 - s 表示一个时间戳 表示 距离1970年1月1日0点0分到现在的 总共多少秒 ``` [[email protected] ~]# date +%H 22 [[email protected] ~]# date +%s 1511188397 [[email protected] ~]# date +%S 22 [[email protected] ~]# date +%S 32 [[email protected] ~]# ``` - 关于时间 - date +%T - date +%H%M%S ``` [[email protected] ~]# date +%T 22:35:38 [[email protected] ~]# date +%H%M%S 223608 [[email protected] ~]# ``` - h显示月份, ``` [[email protected] ~]# date +%h 11月 [[email protected] ~]# ``` - 先把语言改成英文 ``` [[email protected] ~]# LANG=en [[email protected] ~]# date +%h Nov [[email protected] ~]# ``` - 加上冒号 date +%H:%M:%S 等同于 date +%T ``` [[email protected] ~]# date +%H:%M:%S 22:42:38 [[email protected] ~]# date +%T 22:42:42 [[email protected] ~]# ``` - 周 - w 周几 - W 今年的第几周 ``` [[email protected] ~]# date +%w 1 [[email protected] ~]# date +%W 47 [[email protected] ~]# ``` - 显示日历cal ``` [[email protected] ~]# cal November 2017 Su Mo Tu We Th Fr Sa 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 [[email protected] ~]# ``` - 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" ``` [[email protected] ~]# date Mon Nov 20 23:07:38 CST 2017 [[email protected] ~]# date -d "-1 day" Sun Nov 19 23:07:46 CST 2017 [[email protected] ~]# [[email protected] ~]# date -d "-1 day" +%F 2017-11-19 [[email protected] ~]# ``` - 上个月 date -d "-1 month" ``` [[email protected] ~]# date -d "-1 month" +%F 2017-10-20 [[email protected] ~]# ``` - 上一年 date -d "-1 year" ``` [[email protected] ~]# date -d "-1 year" +%F 2016-11-20 [[email protected] ~]# date -d "-1 year" Sun Nov 20 23:10:43 CST 2016 [[email protected] ~]# ``` - 上一个小时 date -d "-1 hour" ``` [[email protected] ~]# date -d "-1 hour" +%T 22:11:43 [[email protected] ~]# ``` - 时间戳 转换成具体的日期时间,也可以现在的时间转换成时间戳 ``` [[email protected] ~]# date +%s 1511190759 [[email protected] ~]# [[email protected] ~]# date -d @1511190759 Mon Nov 20 23:12:39 CST 2017 [[email protected] ~]# [[email protected] ~]# date +%s -d "2017-11-20 23:12:39" 1511190759 [[email protected] ~]# ``` # 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]
时间: 2024-10-21 17:20:14