20.1-20.4 shell:脚本,脚本结构与执行,date用法,shell脚本的变量
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了20.1-20.4 shell:脚本,脚本结构与执行,date用法,shell脚本的变量相关的知识,希望对你有一定的参考价值。
20.1 shell是什么
shell是系统跟计算机硬件交互时使用的中间介质,它只是系统的一个工具。
实际上,他在shell和计算机硬件之间还有一层东西——系统硬核。如果把计算机硬件比作一个人的躯体,那系统内核就是人的电脑。至于shell,把它比作人的五官似乎更贴切些。
用户直接面对的不是计算机硬件而是shell,用户把指令告诉shell,然后shell再传输给系统内核,接着内核再去支配计算机硬件去执行各种操作。
shell是一种脚本语言 微信公众号:aming_linux 博客:blog.lishiming.net shell从今天开始每天一看
可以使用逻辑判断(if,if else),循环(for,while)等语法
可以自定义函数
shell是系统命令的集合
shell脚本可以实现自动化运维,能大大增加我们的运维效率
shell应该怎么写?
拿到需求,要有具体的思路,展开需求关联,开始写shell
20.2 Shell脚本结构和执行
1 创建shell目录,后面都把脚本写在里面
[[email protected] ~]# mkdir shell
[[email protected] ~]# ls
2 编写shell脚本
[[email protected] ~]# vim 01.sh #!/bin/bash echo "123" w ls
参数解释:
#!/bin/bash 第一行必须要这么写,如果脚本只在本机执行可以负略这行,
但要考虑到在其他机器上运行的话,必须要加上,因为后面的命令是通过#!/bin/bash命令来解析命令的。
3 shell脚本执行方法有两种,
3.1 第一种是,给予脚本x执行权限
给予脚本x权限,可以./脚本名称 直接执行,或者是直接执行它(绝对路径)
[[email protected] shell]# chmod a+x 01.sh
[[email protected] shell]# !ls
ls -ll 01.sh
-rwxr-xr-x 1 root root 29 May 29 15:02 01.sh
[[email protected] shell]# ./01.sh 123 16:40:08 up 40 days, 2:15, 1 user, load average: 0.03, 0.06, 0.06 USER TTY FROM [email protected] IDLE JCPU PCPU WHAT root pts/1 211.148.147.194 14:52 0.00s 0.11s 0.00s w
而且还可以cat查看脚本内容,因为已经脚本已经有执行权限,并可以被/bin/bash解析
[[email protected] shell]# cat 01.sh #!/bin/bash echo "123" w ls
3.2 第二种
#bash 01.sh 或者#sh 01.sh
因为bash和sh是同一个文件输出
4 bash解析器的地址
实际上,/bin/sh与/bin/bash是同一个文件,/bin/sh是链接于/bin/bash
[[email protected] shell]# ls -l /bin/bash -rwxr-xr-x 1 root root 960608 Sep 7 2017 /bin/bash [[email protected] shell]# ls -l /bin/sh lrwxrwxrwx 1 root root 4 Oct 15 2017 /bin/sh -> bash
5 以#开头的行作为解释说明(第二行开始),它的作用仅仅是用来解释,并无任何执行意义。
有些特殊脚本#是可以有效的,但不代表全部。
6 脚本的名字以.sh结尾,用于区分这是一个shell脚本
7 查看脚本执行过程 #bash -x 01.sh
[[email protected] shell]# bash -x 01.sh + echo 123 123 + w 15:19:49 up 40 days, 55 min, 1 user, load average: 0.00, 0.01, 0.05 USER TTY FROM [email protected] IDLE JCPU PCPU WHAT root pts/1 211.148.147.194 14:52 5.00s 0.07s 0.00s bash -x 01.s + ls 01.sh
每个+表示一个操作,一个动作。
8 查看脚本是否语法错误,如果没有任何输出表示脚本没问题。
[[email protected] shell]# bash -n 01.sh
8.1 相反,如果有问题(只检测shell语法错误),会有错误信息输出
例如把脚本修改错误,添加有问题的for循环语法,故意不把for的结尾参数写上
[[email protected] shell]# vim 01.sh #!/bin/bash for i in `seq 1 10` do echo $i echo "123" w ls
8.2 执行语法检查命令,把done补上,可以看到有报错
[[email protected] shell]# bash -n 01.sh
01.sh: line 9: syntax error: unexpected end of file
8.3 写入正确的参数 再检查
#!/bin/bash for i in `seq 1 10` do echo $i done echo "123" w ls
录入正确参数后,无错误输出
[[email protected] shell]# bash -n 01.sh
*****以上用了#bash的命令都可以用#sh,因为指向同一个命令文件
20.3 date命令用法
date命令在shell脚本中常用的几个用法如下
date +%Y 表示以四位数字格式打印年份
date +%y 表示以两位数字格式打印年份
date +%m 表示月份
date +%d 表示日期
date +%H 表示小时
date +%h 表示月(英文)
date +%M 表示分钟
date +%S 表示秒
date +%w 表示星期。结果显示0则表示周日。
[[email protected] shell]# date
Tue May 29 15:52:08 CST 2018
[[email protected] shell]# date +%Y 2018年
2018
[[email protected] shell]# date +%y 18年
18
[[email protected] shell]# date +%m 月
05
[[email protected] shell]# date +%M 分钟
52
[[email protected] shell]# date +%d 日
29
[[email protected] shell]# date +%D 月-日-年
05/29/18
[[email protected] shell]# date +%F 年-月-日
2018-05-29
[[email protected] shell]# date +%s 时间戳,距离1970年1月1日0点0分0秒到现在有多少秒
1527580544
[[email protected] shell]# date +%T 当前的时间,精确到秒
15:59:37
[[email protected] shell]# date +%H:%M:%S 同上,跟date +%T一样的效果
16:01:55
[[email protected] shell]# date +%w 星期2,周二,周日是0
2
[[email protected] shell]# date +%W 今年的第几周,第22周
22
日期格式支持组合
年月日表示:20180529
[[email protected] shell]# date +%Y%m%d
20180529
日历形式查看日期
[[email protected] shell]# cal
May 2018
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 31
一天前
[[email protected] shell]# date -d "-1 day"
Mon May 28 16:09:17 CST 2018
日期可以组合+%F使用
[[email protected] shell]# date -d "-1 day" +%F
2018-05-28
一个月前
[[email protected] shell]# date -d "-1 month" +%F
2018-04-29
一年前
[[email protected] shell]# date -d "-1 year" +%F
2017-05-29
时间可以用+%T组合
[[email protected] shell]# date -d "-1 hour" +%T
15:13:01
date +%s 时间戳
时间戳换算标准时间格式
[[email protected] shell]# date +%s
1527581785
[[email protected] shell]# date -d @1527581785
Tue May 29 16:16:25 CST 2018
时间格式转换时间戳
[[email protected] shell]# date +%s -d "2018-05-29 16:19:00"
1527581940
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]
以上是关于20.1-20.4 shell:脚本,脚本结构与执行,date用法,shell脚本的变量的主要内容,如果未能解决你的问题,请参考以下文章
shell脚本介绍shell脚本结构和执行date命令用法shell脚本中的变量
shell脚本介绍结构和执行date命令用法shell脚本中的变量
六十七shell脚本介绍shell脚本结构和执行date命令用法shell脚本中的变量