shell脚本介绍,shell脚本结构和执行方式,date命令的用法,shel
笔记内容:
笔记日期:2017-11-21 20.1 shell脚本介绍 Shell Script,Shell脚本与Windows/Dos下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比Windows下的批处理更强大,比用其他编程程序编辑的程序效率更高,它使用了Linux/Unix下的命令。 换一种说法也就是,shell script是利用shell的功能所写的一个程序,这个程序是使用纯文本文件,将一些shell的语法与指令写在里面,然后用正规表示法,管道命令以及数据流重导向等功能,以达到我们所想要的处理目的。 更明白地来说,shell script就像早期dos年代的.bat,最简单的功能就是将许多指令汇整写一起,让使用者很容易地就能够一个操作执行多个命令,而shell script更是提供了数组,循环,条件以及逻辑判断等重要功能,让使用者可以直接以shell来写程序,而不必使用类似C程序语言等传统程序编写的语法。 概念区别: shell和shell脚本有什么区别?确切一点说,Shell就是一个命令行解释器,它的作用就是遵循一定的语法将输入的命令加以解释并传给系统。它为用户提供了一个向Linux发送请求以便运行程序的接口系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。 Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令型语言,又是一种程序设计语言(就是你所说的shell脚本)。作为命令型语言,它互动式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高阶语言中才具有的控制结构,包括循环和分支。它虽然不是 Linux系统内核的一部分,但它调用了系统内核的大部分功能来执行程序、创建文档并以并行的方式协调各个程序的运行。 Shell脚本最重要的一点是可以批量去执行Linux中的命令,这样的话就可以实现自动化运维。例如有一个需求,是要让你在凌晨3点的时候进行数据的备份,并且把大于50M的备份文件进行压缩。如果没有shell脚本的情况下,你要完成这个需求就只能凌晨3点爬起来敲命令。使用shell脚本的情况下,我只需要把命令写进脚本文件里,然后再设置一个任务计划,让系统在凌晨3点时自动执行这个脚本文件,还不是美滋滋。所以shell脚本不仅能够提升运维效率,还可以让我们的工作没有那么苦逼。 20.2 shell脚本结构和执行 Shell脚本的第一行必须是:#!/bin/bash,"#!" 是一个约定的标记,后面跟着的/bin/bash是告诉系统这个脚本需要使用/bin/bash解释器来执行,即使用哪一种Shell。例如像python脚本就不一样了:#!/usr/bin/env python,因为不同语言所编写的脚本对应的解释器都不一样,但是都需要使用 "#!" 来作为标记。简单来说就是告诉系统这是一个什么语言写的脚本,是python是shell或者是其他的脚本语言所写的,然后系统才能使用相应的解释器去执行这个脚本。不过如果这个shell脚本是在本机执行的话,倒是可以省略掉:#!/bin/bash,因为能够识别本机的命令,但是如果到另一台机器就不一定能够执行了,所以文件的第一行才要写这样的声明。 Shell脚本的文件名称是以.sh为后缀,用于区分这是一个shell脚本,shell中的注释符是井号“#”,和其他编程语言一样,注释的那一行内容不会被解释器执行,但是要注意区别“#!”和“#”,前者是标记,后者才是注释符。 编写第一个shell脚本: 既然知道shell脚本的基本结构后,我们来编写第一个shell脚本吧: vim Hello.sh 脚本内容如下: 执行shell脚本的方法有三种: sh Hello.sh chmod a+x Hello.sh; ./Hello.sh bash Hello.sh 第二种执行方法是给这个Hello.sh的脚本文件加上了可执行权限,所以可以当做一个二进制文件直接执行: sh和bash实际上是同一个命令,因为sh是bash的软连接文件: 要注意的是,#!/bin/bash写在文件的第一行才是被当做声明,如果写了两行#!/bin/bash,那么第二行就会被当做注释: 将系统命令写在脚本里就会被批量执行: 运行结果: 查看脚本执行过程 bash -x Hello.sh: 每一个“+”代表执行的命令,后面跟着命令的执行结果。 查看脚本是否语法错误 bash -n Hello.sh: 没有任何的输出就代表这个脚本没有语法错误。 例如我把故意把脚本语法写错: 如图,就会提示语法错误,并且还能告诉你错误出现在文件的第几行。 但是要注意的是,这只是检查脚本的语法错误,如果你系统命令写错了,是不会被检查到的。 20.3 date命令用法 date是一个与时间日期相关的命令,如果直接使用的话,是显示当前系统的日期时间: date命令在shell脚本中作用很大,例如我在备份某个文件或者记录某些日志信息的时候,就可以使用这个命令给这些备份文件或日志信息标记一个时间。 以下介绍date命令的一些常见用法:
关于表示时间符号的解释:
date -d "+1 day" +%F
date -d "-1 day" +%F
date -d "-1 month" +%F
date -d "-1 min" 8. 打印一年前的日期: date -d "-1 years" +%F 9. 打印一小时前: date -d "-1 hour" +%T 10. 把一个日期转换成时间戳: date +%s -d "2017-09-06 06:52:16" 另一个与时间相关的命令:cal,cal命令可以显示日历: 20.4 shell脚本中的变量 shell脚本中的变量和其他编程语言中的变量含义是一样的,都是用来存储一个数据,然后使用变量名就可以进行调用了,shell脚本的语法和其他脚本的语法类似,都不需要使用分号作为语句的结束。 shell脚本定义变量的规则:
定义一个变量:
调用变量时需要在变量名前面加上$:
只读变量: 使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。 下面的例子尝试更改只读变量,结果报错: 运行脚本,结果如下: 删除变量: 使用 unset 命令可以删除变量里的数据。语法: unset name 示例: 运行结果: 因为变量的内容被删除,所以输出的是空的。 变量类型: 运行shell时,会同时存在三种变量: 1) 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。 2) 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。 3) shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行 如果文中图片失效,请点击以下链接查看: hell脚本介绍,shell脚本结构和执行,date命令的用法,shell脚本中的变量 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |