SHELL脚本应用与常用工具使用培训思华科技(上海)有限公司--工程部第1页,共35页2020-02-12版本:1.0(内部资料)1.Shell脚本应用1.1.shell脚本定义简单的说shell程序就是一个包含若干行shell或者linux命令的文件.1.2.shell脚本执行方法#chmod+xfile#shfile#./file1.3.shell脚本分类在编写shell时,第一行一定要指明系统需要哪种shell,解释你的shell程序,如:#!/bin/bash,/bin/sh,/bin/ksh属于Bourneshell衍生,bash是Linux系统默认使用的Shell,内部命令一共有40个#!/bin/csh,/bin/tcshSHELL脚本应用与常用工具使用培训思华科技(上海)有限公司--工程部第2页,共35页2020-02-12版本:1.0(内部资料)属于Cshell衍生echo$SHELL可以查看系统的shell环境1.4.shell脚本变量1.4.1.系统变量表示方法描述$n$1表示第一个参数,$2表示第二个参数...$#命令行参数的个数$0当前程序的名称$?前一个命令或函数的返回码$*以参数1参数2...形式保存所有参数$@以参数1参数2...形式保存所有参数SHELL脚本应用与常用工具使用培训思华科技(上海)有限公司--工程部第3页,共35页2020-02-12版本:1.0(内部资料)$$本程序的(进程ID号)PID$!上一个命令的PID其中使用得比较多得是$n$#$0$?举列说明:#!/bin/shif[$#-ne2];thenechoUsage:$0stringfile;exit1;figrep$1$2;if[$?-ne0];thenechoNotFound\$1\in$2;exit1;fiechoFound\$1\in$2;上面的例子中使用了$0$1$2$#$?等变量,下面是程序的解释:判断运行参数个数,如果不等于2,显示使用用法帮助,其中$0表SHELL脚本应用与常用工具使用培训思华科技(上海)有限公司--工程部第4页,共35页2020-02-12版本:1.0(内部资料)示就是脚本自己。用grep在$2文件中查找$1字符串。判断前一个命令运行后的返回值(一般成功都会返回0,失败都会返回非0)。如果没有成功显示没找到相关信息,否则显示找到了。其中\表示转义,在里面还需要显示号,则需要加上转义符\.1.4.2.环境变量shell环境变量是所有shell程序都会接受的参数。shell程序运行时,都会接收一组变量,这组变量就是环境变量名称描述PATH命令搜索路径,以冒号为分隔符.注意与DOS下不同的是,当前目录不在系统路径里HOME用户home目录的路径名,是cd命令的默认参数SHELL脚本应用与常用工具使用培训思华科技(上海)有限公司--工程部第5页,共35页2020-02-12版本:1.0(内部资料)COLUMNS定义了命令编辑模式下可使用命令行的长度EDITOR默认的行编辑器VISUAL默认的可视编辑器FCEDIT命令fc使用的编辑器HISTFILE命令历史文件HISTSIZE命令历史文件中最多可包含的命令条数HISTFILESIZE命令历史文件中包含的最大行数IFS定义SHELL使用的分隔符LOGNAME用户登录名MAIL指向一个需要SHELL监视其修改时间的文件.当该文件修改后,SHELL将发消息Youhavamail给用户MAILCHECKSHELL检查MAIL文件的周期,单位是秒SHELL脚本应用与常用工具使用培训思华科技(上海)有限公司--工程部第6页,共35页2020-02-12版本:1.0(内部资料)MAILPATH功能与MAIL类似.但可以用一组文件,以冒号分隔,每个文件后可跟一个问号和一条发向用户的消息SHELLSHELL的路径名TERM终端类型TMOUTSHELL自动退出的时间,单位为秒,若设为0则禁止SHELL自动退出PROMPT_COMMAND指定在主命令提示符前应执行的命令PS1主命令提示符PS2二级命令提示符,命令执行过程中要求输入数据时用PS3select的命令提示符PS4调试命令提示符MANPATH寻找手册页的路径,以冒号分隔SHELL脚本应用与常用工具使用培训思华科技(上海)有限公司--工程部第7页,共35页2020-02-12版本:1.0(内部资料)LD_LIBRARY_PATH寻找库的路径,以冒号分隔1.4.3.用户变量用户定义的变量必须由字母数字及下划线组成,并且变量名的第一个字符不能为数字,与其它UNIX名字一样,变量名是大小写敏感的。在linux支持的所有shell中,都可以用赋值符号(=)为变量赋值.如:abc=9(bash/pdksh不能在等号两侧留下空格)setabc=9(tcsh/csh)由于shell程序的变量是无类型的,所以用户可以使用同一个变量时而存放字符时而存放整数.如:name=abc(bash/pdksh)setname=abc(tcsh)在变量赋值之后,只需在变量前面加一个$去引用.如:echo$abcSHELL脚本应用与常用工具使用培训思华科技(上海)有限公司--工程部第8页,共35页2020-02-12版本:1.0(内部资料)1.5.shell脚本格式1.5.1.循环脚本一共有三种格式:while...do...done举例:#!/bin/bashcleari=1while(($i100))doif(($i%3==0))thenecho$ifii=$(($i+1))SHELL脚本应用与常用工具使用培训思华科技(上海)有限公司--工程部第9页,共35页2020-02-12版本:1.0(内部资料)done2)until...do...done3)for...do...done举例:#!/bin/bashclearforiin`seq100`doif((i%3==0))thenecho$icontinuefidoneSHELL脚本应用与常用工具使用培训思华科技(上海)有限公司--工程部第10页,共35页2020-02-12版本:1.0(内部资料)1.5.2.重定向脚本commandfilename把标准输出重定向到一个新文件中commandfilename把标准输出重定向到一个文件中(追加)command1fielname把标准输出重定向到一个文件中commandfilename2&1把标准输出和标准错误一起重定向到一个文件中command2filename把标准错误重定向到一个文件中command2filename把标准输出重定向到一个文件中(追加)commandfilename2&1把标准输出和标准错误一起重定向到一个文件中(追加)commandfilenamefilename2把command命令以filename文件作为标准输入,以filename2文件作为标准输出commandfilename把command命令以filename文件作为标准输入commanddelimiter把从标准输入中读入,直至遇到delimiter分界符command&m把文件描述符m作为标准输入SHELL脚本应用与常用工具使用培训思华科技(上海)有限公司--工程部第11页,共35页2020-02-12版本:1.0(内部资料)command&m把标准输出重定向到文件描述符m中command&-把关闭标准输入1.5.3.判断脚本流程控制if表达式如果条件为真则执行then后面的部分:格式:if....;then....elif....;then....else....fi举例time=`date+%H:%M`if[$time=00:10]thenrm-f$workdir/$rmdateSHELL脚本应用与常用工具使用培训思华科技(上海)有限公司--工程部第12页,共35页2020-02-12版本:1.0(内部资料)fi判断字符:-eq检查某两个值是否相等(例如,if[2eq5])-ne检查两个值是否不相等-lt检查值1是否小于值2-le检查值1是否小于等于值2-gt检查值1是否大于值2-ge检查值1是否大于等于值2-f检查某一个文件是否存在(例如,[-f文件名])-d检查某一个目录是否存在SHELL脚本应用与常用工具使用培训思华科技(上海)有限公司--工程部第13页,共35页2020-02-12版本:1.0(内部资料)1.5.4.awk/sed工具sed:sed是一个非交互性编辑器,必须通过行号或正则表达式指定要改变的文本行。sed-n'2p'test.txt#打印test.txt文件第2行内容sed-n'1,3p'test.txt#打印test.txt文件第1-3行内容awk:与sed和grep很相似,awk是一种样式扫描与处理工具。但其功能却大大强于sed和grep。awk提供了极其强大的功能:它几乎可以完成grep和sed所能完成的全部工作。1.6.项目常用脚本1.6.1.log删除脚本1)举例1#!/bin/shfind/opt/tomcatepg/logs-name*-mtime+5-execcompress{}\;find/opt/tomcatepg/logs-name*.Z-mtime+60-execrm-f{}\;2)举例2SHELL脚本应用与常用工具使用培训思华科技(上海)有限公司--工程部第14页,共35页2020-02-12版本:1.0(内部资料)#!/bin/shtime=`date+%H:%M`workdir=/opt/tomcatepg/logif[$time=00:10]thenrm-f$workdir/$rmdatefi完成功能:通过crontab程序定期对log进行删除动作。保证不会因为log文件撑满磁盘空间。1.6.2.进程监控脚本#!/bin/bashlength=`ps-ef|grepAuthView.exe|wc-l`if[$length!=2]thenecho$(date+%y%m%d-%H:%M:%S):AuthViewerrorfound.restartit/opt/log.logSHELL脚本应用与常用工具使用培训思华科技(上海)有限公司--工程部第15页,共35页2020-02-12版本:1.0(内部资料)cd/usr/contex2/AuthView\(linux\)/Bin/\n./AuthViewstartelseecho$(date+%y%m%d-%H:%M:%S):AuthViewrunok/opt/log.logfi完成功能:监控进程的健康程度,并生成log日志。如果进程不活动,则重起该进程。1.6.3.配置备份脚本1、编辑confbp.shtarczf/opt/bp/`hostname`confbp`date+%Y%m%d`.tgz/usr/contex2/Server\(linux\)/Config/cd/opt/bp/cat/opt/bp/ftp.txt|ftp–n2、ftp.txt文件内容:open58.211.1.108usermediamedia123SHELL脚本应用与常用工具使用培训思华科技(上海)有限公司--工程部第16页,共35页2020-02-12版本:1.0(内部资料)binpromptoffhashmput*.tgzbye也可以这样写ftp-i-in!open58.211.1.108usermediamedia123cd/mput*.tgzbye!完成功能:配置文件ftp上传至备份目录,再通过crontab程序定期执行备份脚本SHELL脚本应用与常用工具使用培训思华科技(上海)有限公司--工程部第17页,共35页2020-02-12版本:1.0(内部资料)1.6.4.邮件报警脚本#!/bin/shstat_date=`/bin/date-d'1dayago'+%m%d`.~/.bash_profi