【Shell脚本编程在工作中的使用研究6500字(论文)】_第1页
【Shell脚本编程在工作中的使用研究6500字(论文)】_第2页
【Shell脚本编程在工作中的使用研究6500字(论文)】_第3页
【Shell脚本编程在工作中的使用研究6500字(论文)】_第4页
【Shell脚本编程在工作中的使用研究6500字(论文)】_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Shell脚本编程在工作中的使用研究目录TOC\o"1-2"\h\u摘要 1关键词: 11.绪论 31.1课题探究背景 31.2课题研究理论 31.2.1Shell介绍 41.2.2Shell的功能 41.2.3实际意义 42.Shell脚本编程 42.1Shell编程的优势 42.2Shell脚本的基本使用 42.2.1Shell脚本的运行 42.3Shell脚本开发环境的配置和优化 52.3.1使用vim而不是vi编辑器 52.3.2配置文件.vimrc的重要参数介绍 53.Shell脚本一键部署LAMP架构 73.1LAMP简介 73.2Apache简介 73.3Apache的主要特点 73.4应用Shell脚本LAMP架构的搭建 83.4.1shell脚本规则 83.4.2脚本设计 83.4.3判断脚本执行是否为root用户 83.4.4检查安装环境 83.4.5开始安装并检测 93.4.6开始修改配置文件 113.4.7脚本测试 134.Shell脚本调试 134.1Shell脚本调试技术 144.2trap命令 144.3tee命令 144.4使用shell选项 155.结论 15参考文献 17摘要随着云计算的大数据时代的到来,网络压力也越来越大。现在很多网络服务器都是以集群的形式来工作,来实现负载均衡,故障转移等功能。然而有利便有弊,当我们想要设置新的功能或者配置时,便会让我们运维的工作人员有了庞大的重复的工作量。这时shell脚本体现出了它强大的能力。我们可以做一个常用的shell脚本,来解决这些重复的工作,省时、省力而且减免了打代码所出现的错误。但是要在工作中使用shell脚本我们还要掌握shell编程的规则和Linux系统基础命令。这样一来我们可以让shell脚本直接面向底层来工作,效果体现更加完美。关键词:网络服务器;shell脚本;Linux系统1.绪论1.1课题探究背景1971年,贝尔实验室的KenThompson为UNIX开发了第一个Shell——V6Shell。此版本Shell是在内核之外的独立程序,但是它引入了一系列的简单明了的语法,并且沿用至今。但是它的缺陷就是脚本的编程能力不足,只是一个交互性的命令解释器。1977年,StephenBourne在贝尔实验室为V7UNIX开发了BourneShell。它在脚本中加入了多个更好的,更适合脚本的选项。这样一来虽然支持了信号处理,但是缺乏自定义函数机制。由于它引入了命令的替换、here-document等使用相当便捷的功能,所以它一直沿用至今。它在Shell的前进道路上迈出了至关重要的第一步,成为了其它派生Shell的基石。1978年,BillJoy在加州大学伯克利分校读书的时候就开发了CShell。在不久之后CShell便增加了新的功能,既文件名和命令的补全还有命令行的编辑功能,并且提升了整体的交互性和更好的兼容性。并且还有了一项非常实用的功能,命令历史记录,这项功能,无论是工作还是教学都又很好的表现。1922年出现了BashShell,是一个开源的GNU项目,他可以完全兼容BourneShell,其目的就是要替换它。BashShell现在已经成为主流的Shell之一,并且被广泛运用于诸多系统之上。这便是Shell语言的发展历史,他们之间最大的区别就是他们使用了不同的授权,Bash遵循GPL授权,Cshell遵循的则是BSD许可,KormShell则是遵循了共用许可证。Shell脚本语言是Linux/UNIX系统上的重要脚本语言,熟练的使用脚本语言,是作为一名Linux/UNIX开发者和系统管理者的必备条件。Shell脚本更加适合处理纯文本型数据,因为Linux系统中的配置文件,日志文件全部都是文本型的文件。所以想要在Linux中更好更快的工作,学好Shell极为关键。图1-1形象的展示了Shell脚本运维工作中的地位。图1-1

Shell脚本在运维工作中的地位形象图1.2课题研究理论1.2.1Shell介绍脚本通常使用基于解释器的编程语言,而shell脚本就是一些文件。我们编写一系列要执行的命令,写入创建的文件脚本中,然后通过shell执行这些文件脚本。1.2.2Shell的功能Shell字面意思时“壳”,这就时根据它的作用所赋予的。当一台系统运行起来有一个复杂的程序,为了让用户由更简洁的使用,同时为了保护内核不会因为用户的操作而受到损坏,便在内核之上创建了一个层,这个层就是“壳”,也就是Shell。BashShell有两种工作模式,分别是互动模式和脚本模式。互动模式是由用户输入命令,一领一动的进行对话。而脚本模式是对要完成的工作的命令脚本写入文件中,再由BashShell完成解释执行。很明显后者的工作效率更高,所以这也是现在“自动化运维”中重要的工作过程。现在对于更多的重复的工作量,脚本的开发需求越来越高,Shell实际上已经发展成为一种开发工具。1.2.3实际意义目前时代下的网站流量都爆炸式的增长,为了用户更好的体验,背后都是几十上百台的服务器设备来工作。如果你是运维人员,想要高效快速的管理和处理问题便成为了难题。要解决这个问题,就要在Linux运维工作中做好运维服务的标准化、规范化、流程化和自动化。要实现运维的自动化就需要学会脚本编程语言,而现在最为流行的脚本编程语言由Shell和Python。因为Shell在处理底层工作中的优势,所以Shell是大部分企业对自动化的绝对要求在这两者中。2.Shell脚本编程2.1Shell编程的优势是一门火热且很容易入门的语言,主要原因是其语法结构简单,可以让初学者也非常迅速的上手。如果是有编程基础的工程师,一段时间便可以熟练掌握。Shell语言是基于Linux的,所以其命令简单,即使在不清楚的情况下也可以使用Linux系统成熟的机制进行查询。Shell的普及还有一个重要的原因,就是它是解释型的语言,在编译过程中,我们可以一边开发,一边测试,让我们的工作效率有很大的提升。还有它的跨平台性,使得在不同的平台也可以直接运行。这些优点让它拥有了简易,快捷的口碑。2.2Shell脚本的基本使用2.2.1Shell脚本的运行(1)我们知道Shell有不同的版本,所以当我们运行前要指定它的版本,然后通过指定版本去对我们的命令进行解释。所以最简易的方式就是在目录中直接bash这个脚本。所以当我们使用这种方式去运行脚本,该脚本就不需要再使用“#!、bin、bash”去进行指定。(2)这种方式是在Linux系统内,给该脚本文件加一个执行权限,然后使用“./+脚本文件名”的命令来执行,如果没有执行权限,该脚本不会执行,并且报出无执行权限的错误。[root@aubin~]#

chmod

+x

Shell.sh[root@aubin~]#

./Shell.shHello

Shell#如果脚本没有可执行权限,则会报权限错误root@localhost

~]#

./Shell.sh-bash:

./Shell.sh:

Permission

denied(3)如果希望该脚本能成为默认的系统命令,简单地将该脚本复制到任一系统$PATH变量所包含的目录中,同时赋予可执行权限,下次运行的时候只需要直接输入该命令即可。也支持用Tab键补全命令。下例就是将其复制到了/bin目录,并执行该脚本的情况。第三种方法是工程师们最常用的方法,可以一劳永逸的方式。当我们把该脚本复制到系统中$PATH变量所包含的目录中,再给该脚本文件执行权限即可。进行完以上操作,再执行其脚本时只需要直接在命令行输入脚本文件名即可。[root@aubin~]#

chmod

+x

Shell.sh[root@aubin~]#

mv

Shell

/bin/[root@aubin~]#

Shell.shHello

Shell2.3Shell脚本开发环境的配置和优化2.3.1使用vim而不是vi编辑器在编辑器的选用上,vi相对于vim来说是一个极其简单的记事本,功能少而且不适合编辑脚本,代码。缺少代码高亮,自动缩进等功能,使得它在程序员们选择编辑工具时,完全不会考虑。所以在Linux下的vim这款高级编辑器在代码和脚本开发上来说更加得心应手。因此,首先要做如下调整,以便只使用vim作为开发脚本的工具:经过上述调整后,当用vi命令时,会自动被vim替换2.3.2配置文件.vimrc的参数Linux环境下的vim编辑器是一款高级编辑器,其功能非常多,但是默认功能不够强大,如果要进行代码的开发,还需要进行适当的设置,以达到高效率开发脚本的目的。vim编辑器的配置文件是一个放在用户目录下的隐藏文件。其路径为:~/.vimrc。当我们使用此编辑器开发脚本时,会对.vimrc进行基本设置,以达到高效的作用。在Shell脚本的开头自动增加解释器及作者等版权信息autocmdBufNewFile*.py,*.cc,*.sh,*.javaexec":callSetTitle()"funcSetTitle()ifexpand("%:e")=='sh'callsetline(1,"#!/bin/bash")callsetline(2,"#Author:刘立鹏")callsetline(3,"#Time:".strftime("%F%T"))callsetline(4,"#Name:".expand("%"))callsetline(5,"#Version:V1.0")callsetline(6,"#Description:Thisisatestscript.")endifendfunc3.Shell脚本一键部署LAMP架构3.1LAMP简介LAMP是Linux,Apache,Mysql,PHP的缩写词。Lamp架构是现在大型企业运用最多的网络架构模式。Lamp架构可以是一个环境也有人愿意称之为时一个软件,它的作用就是提供一个Web站点服务的开发。3.2Apache简介Apache服务是一个开源的项目,基于标准的HTTP网络协议提供网页浏览服务,因为它的这些优点,所以在Web服务器领域中一直保持着大量的份额。Apache良好的兼容性,可以很好的运用在Linux、UNIX、Windows的操作系统中。3.3Apache的主要特点其是ASF旗下著名软件项目之一,正式名称是“httpd”也就是历史上的Apache网站服务器,之所以被广泛应用就是因为它的众多特点。(1)开放源代码:这是Apache服务器最重要的特征,也是其它特性的基础。

Apache服务程序由全世界任何人都可以免费的使用,所以它的维护也是由所有的开发者一起进行,充分的体现了开源软件的精神。(2)跨平台应用:跨平台性是它得以广泛使用的特性,而这个完美的特性得益于其源代码的开放,使得它可以非常兼容的运行在各个平台。(3)模块化设计:Apache有非常好的扩展性,它将各个功能模块化,使得软件开发商可以简单的修改,添加,删除它的功能。(4)运行非常稳定:因为它的工作原理的原因,不会给服务器带来很大的负载,所以他又很好的稳定性,非常适合构建具有大量访问量的Web站点。这也是为什么有很多大型企业回去选择使用它的原因。(5)良好的安全性;Apache服务器的安全性时分厂不错的,这是因为它开放的源代码,使用的人多之又多。使用者发现它的安全隐患还有其本身的维护团队,都会对其进行安全补救,提供相应的维修程序,为所有的Apache使用者安全的使用其服务器。3.4应用Shell脚本LAMP架构的搭建3.4.1shell脚本规则我们知道Shell时将文件发个解释器,再有解释器翻译给内核进行执行。那么Shell就需要一个标记,“#!”这便是每一个Shell脚本所必须要有的。而他所需要解释器也要我们去告知解释器的位置。那么“/bin/bash”就是解释器的具体位置。除#!以外还要经常用到#来做开头,这里的#是用来做注释的。实际上,即便是自己写的脚本,在经过一段时间后也很容易忘记,所以多写注解是非常有必要的,方便自己日后维护时省时省力的看懂脚本,也方便其他人看懂自己的脚本文件。[root@localhost~]#catlamp.sh#!/bin/bash#3.4.2脚本设计项目脚本设计如下(1)判断执行用户是否为root用户,若不是,脚本执行停止并提示。(2)检查即将安装的软件是否已经存在,若存在,先卸载。(3)开始逐步安装Apache,MySQL,PHP与其所需的依赖包(4)没安装一次检测一次是否安装成功,若不成功,提示失败并且停止脚本。(5)全部安装成功,开始修改配置文件,若无法找到配置文件,提示没有找到所需配置文件,并停止脚本执行。3.4.3判断脚本执行是否为root用户if[$UOD-ne0!];thenecho”请以root用户身份执行该脚本!”exit1fi3.4.4检查安装环境if[!`rpm-qayum`];then echo"==============================请先安装YUM============================================";exit1fiecho"========================先清理一下,原来的软件#(mysql,apache)================================";if[`rpm-qamysql`];then echo"============================正在删除原有mysql========================================="; yum-yremovemysql rm-f/etc/fif[`rpm-qahttpd`];then echo"==========================正在删除原有apache========================================"; yum-yremovehttpdfifi3.4.5开始安装并检测echo"=======================================安装apache中============================================";yum-yinstallhttpd#安装apacheif[!`rpm-qahttpd`];then echo"=============================apache安装失败请重新执行脚本=========================================";exit1fiyum-yinstallhttpd-manualmod_sslmod_perlmod_auth_mysql #安装apache扩展systemctlstarthttpd.serviceif[!$?];then echo"===========================apache启动失败请重新执行脚本================================";exit1fisystemctlenablehttpd.service #设置开机自启动apacheif[!$?];then echo"=======================apache设置开机自启动失败请重新执行脚本==========================";exit1fiecho"=======================================安装apache成功!============================================";echo"=======================================安装PHP5.6中=============================================";yum-yinstallphp#配置yum源,以下是CentOS7.0的源。systemctlrestarthttpd.serviceif[!$?];then echo"===========================安装PHP5.6失败请重新执行脚本================================";exit1fiecho"=======================================安装PHP5.6成功!============================================";echo"====================================安装mysql-5.7.16中=======================================";wget/get/mysql57-community-release-el7-11.noarch.rpm#使用wget下载官方yum源的mysql-rpm包rpm-ivhmysql57-community-release-el7-11.noarch.rpm#安装mysql-rpm包yuminstall-ymysql-server#使用yum来安装mysql-serversystemctlstartmysqld#安装完成后,启动mysqld服务if[!$?];then echo"===========================mysql启动失败请重新执行脚本================================";exit1fisystemctlenablemysqld#设置mysqld服务开机自启动if[!$?];then echo"=======================mysql设置开机自启动失败请重新执行脚本==========================";exit1firm-f/mysql57-community-release-el7-11.noarch.rpm;echo"=======================================安装mysql-5.7成功!============================================";3.4.6开始修改配置文件echo"====================================配置apache中=======================================";if[!-e"/etc/httpd/conf/httpd.conf"];then echo"========================找不到配置文件,请重置系统后执行脚本=================================";exit1fised-i's/OptionsIndexesFollowSymLinks/OptionsIncludesExecCGIFollowSymLinks/g'/etc/httpd/conf/httpd.conf#允许服务器执行CGI及SSI,禁止列出目录sed-i's/#AddHandlercgi-script.cgi/AddHandlercgi-script.cgi.pl/g'/etc/httpd/conf/httpd.conf#允许扩展名为.pl的CGI脚本运行sed-i's/AllowOverrideNone/AllowOverrideAll/g'/etc/httpd/conf/httpd.conf#允许.htaccesssed-i's/DirectoryIndexindex.html/DirectoryIndexindex.htmlindex.htmDefault.htmlDefault.htmindex.phpDefault.phpindex.html.var/g'/etc/httpd/conf/httpd.conf#设置默认首页文件,增加index.phpecho"====================================配置apache成功!=======================================";echo"====================================配置PHP5.6中=======================================";if[!-e"/etc/php.ini"];then echo"========================找不到配置文件,请重置系统后执行脚本=================================";exit1fised-i's/;date.timezone=/date.timezone=PRC/g'/etc/php.inised-i's/expose_php=On/expose_php=Off/g'/etc/php.ini #禁止显示php版本的信息#sed-i's/;open_basedir=/open_basedir=usr\/www\/html:\/tmp\//g'/etc/php.ini #设置表示允许访问当前目录(即PHP脚本文件所在之目录)和/tmp/目录,可以防止php木马跨站sed-i's/;always_populate_raw_post_data/always_populate_raw_post_data/g'/etc/php.inised-i's/session.auto_start=0/session.auto_start=1/g'/etc/php.inised-i's/display_errors=Off/display_errors=On/g'/etc/php.inised-i's/error_reporting=E_ALL&~E_DEPRECATED&~E_STRICT/error_reporting=E_ALL|E_STRICT/g'/etc/php.inisystemctlrestarthttpd.serviceif[!$?];then echo"===========================apache启动失败请重新执行脚本================================";exit1fiecho"====================================配置PHP5.6成功!=======================================";echo"====================================配置MYSQL5.7中=======================================";if[!-e"/etc/f"];then echo"========================找不到配置文件,请重置系统后执行脚本=================================";exit1fiecho'sql-mode="NO_AUTO_Create_USER,NO_ENGINE_SUBSTITUTION"'>>/etc/f#防止数据出现MySQL1364错误:#1364–Field“details”doesn’thaveadefaultvalue。/bin/systemctlstartmysqld.service#设置mysqld重启if[!$?];then echo"=======================mysql重启失败请重新执行脚本==========================";exit1fiecho"====================================配置MYSQL5.7成功!=======================================";3.4.7脚本测试运行脚本大约一分钟,如果最后显示安装成功,脚本测试成功,如图3-1为部署成功的截图,3-2为验证截图。图3-1测试成功图图3-2测试成功图

4.Shell脚本调试4.1Shell脚本调试技术在Shell脚本调试中,最常用的有四种调试方式:trap命令、tee命令、调试钩子和Shell选项。trap命令可以作为echo语句去使用,很适合并且迅速地在脚本中输出调试的信息,可以用于追踪变量、函数等。当调试管道错误时我们用到tee命令,方便我们清楚信息在管道间的流向便。调试钩子是借鉴高级程序设计语言的方法,它使得调试模块与程序功能模块分离,是一种非常好的脚本编写方式。我们需要的是一种不改变脚本内容,且简单快捷的调式方法,而Shell选项就是其中之一。其中-n,-x选项被广泛使用。4.2trap命令trap命令是我们在Linux系统中常见的命令,在Linux系统中,我们常用于抓包。此命令也可以运用于Shell脚本中。例如:trap的“Ctrl+C”组合键所促发的INT信号,可以执行中断处理。当Shell脚本运行时,会产生三个“伪信号”,因为这几个信号并不是Linux系统产生的,因此而得名。我们可以用trap命令去对此信号进行抓捕,然后由抓捕到的不同信号来判断脚本的运行状态。三种“伪信号”分别为ERR、EXIT、DEBUG,其产生条件如图5-1。图4-1Shell伪信号及其产生条件我们对三种“伪信号”的抓捕可以清晰的跟踪脚本执行的信息,变量,是否执行成功等信息,着都得益于trap命令的便利条件。它比echo命令看起来更简洁,效率更高。4.3tee命令tee命令产生数据会产生两个直流,一个用来标准输出,一个作为输出文件。这样的特性正好契合Shell脚本的管道输入和输出的模式的调试,当我们将管道连接起来时,效果并不是所预想的效果时,就需要逐字逐句的进行排错工作,但因为管道的特性,但是这执行的中间过程并不会呈现在屏幕上,这就给我们排错带来了困难,而tee命令刚好可以完美解决这个问题。tee命令适用于管道的调试,通过观察tee命令产生的中间结果文件,可以清晰地看出管道间的数据流向,从而为Shell脚本调试提供帮助。4.4使用

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论