收藏 分享(赏)

Shell编程实例.ppt

上传人:精品资料 文档编号:11319947 上传时间:2020-03-17 格式:PPT 页数:27 大小:414.80KB
下载 相关 举报
Shell编程实例.ppt_第1页
第1页 / 共27页
Shell编程实例.ppt_第2页
第2页 / 共27页
Shell编程实例.ppt_第3页
第3页 / 共27页
Shell编程实例.ppt_第4页
第4页 / 共27页
Shell编程实例.ppt_第5页
第5页 / 共27页
点击查看更多>>
资源描述

1、Shell编程,技术培训中心 2011-3-16,课程目标,通过本课程中三个实例的学习,学完后能够在Unix/Linux环境下: 定制系统/应用文件的备份恢复策略 定制NMS程序的启动方式 NMS事件接口程序定制,重点内容,环境变量 I/O重定向 函数使用 循环分支 awk与cut字符串处理,3,课程目录,Shell简介 Shell实例1-备份恢复脚本 Shell实例2-服务启动停止脚本 Shell实例3-NMS事件接口脚本,培训场景,Redhat Advanced Server 5.4 NMS 4.7.2,Shell简介,什么是Shell Shell种类 编写Shell脚本流程,Shell简

2、介,什么是Shell我们知道计算机的运行离不开硬件,而用户只能透过操作系统中硬件驱动来使用硬件资源。而操作系统对用户来说就是一个核心(kernel)加一个操作界面,操作界面与核心沟通的程序就是我们常用的shell,所谓的外壳程序。Shell最简单的定义是命令解释器(command interpreter): 将用户的命令翻译给核心(kernel)处理,同时将核心的处理结果翻译给用户 每次我们登录Unix/Linux系统时,我们就取得了一个互动模式 (interactive)shell,称为login shell,若从进程(process)的角度来说,我 们在shell中执行的命令,均是shel

3、l产生(fork)的子进程。如果是执行 脚本(shell script)的话,脚本中的命令则是由另外一个非互动模式的 子shell(sub shell)执行。,7,Shell简介,Shell种类 我们必须知道,kernel与shell是不同的两套软件,而且都可被替换: 不同的操作系统使用不同的shell; 同一个kernel之上可以使用不同的shell。 常见的shell分为两大主流: sh: Bourne shell(sh) Bourne again shell(bash) csh: C shell(csh) tc shell(tcsh) korn shell(ksh),8,Shell简介,

4、编写Shell脚本流程 1、定义shell解释器,如#!/bin/sh 2、变量定义,如文件路径、文件名等 3、需要执行的命令,按执行顺序 4、测试命令执行状态返回值。 5、退出shell(exit ),9,环境变量定义,命令序列,条件测试、循环,测试返回值,退出shell,Shell解释器,返回值,Shell脚本实例,shell脚本有三种类型用途: 批处理shell 交互式shell 字符串处理shell本文按照项目中常见的场景介绍批处理shell与字符串处理功能的脚本。 批处理shell脚本常用于服务启动、程序备份; 字符串处理常用于事件接口脚本的解析 交互式shell常用于程序的自动化安

5、装向导。,10,实例1-备份恢复脚本,脚本目的:Oracle的exp异地备份 知识点1:环境变量定义 知识点2:条件判断 知识点3:重定向,实例1-备份恢复脚本,知识点1:环境变量定义 expnms.sh脚本中的如下内容: export ORACLE_SID=bjnms LogFile=/tmp/oracle_back.log Backup=/oracle/oradata/bjnmsapp/ultrapower ExpFile=$(date +%Y%m%d)_nms 说明:环境变量定义使用var=value的形式,可将字符串或数字赋值给一个变量 名,字符串可以使用双引号引起,也可以不用双引号,

6、也可以表示某一个目录路 径,也可以是一个文件名;在变量名前加export表示将变量导出到subshell而成 为一个环境变量,不加export的变量只能称为本地变量(当前shell环境有效)。 $()表示命令替换,将括号中的内容当做命令执行并返回执行结果。,12,实例1-备份恢复脚本,知识点2:条件判断 expnms.sh脚本中的如下内容: if ! $USER = “oracle“ ;then echo “must be oracle run to this script“ exit 2 fi -d $Backup & echo “directory is exists”|mkdir -p

7、$Backup 说明:以上为两种形式的条件判断:ifelsefi与test。if判断后面方括号中的内容,判断为真返回0,为假返回1,为真时则执行then后面的语句,否则执行else下的语句,执行到fi结束。 test方式的条件判断可直接使用方括号 在方括号中使用条件判断,如-d测试是否为目录(directory),如果测试为真则继续执行&后面的命令,否则执行|后的命令,其中&表示关系与运算符,|表示关系或运算符,13,实例1-备份恢复脚本,知识点3:重定向 expnms.sh脚本中的如下内容: echo “at $(date +%Y-%m-%d_%H:%M:%S)“$LogFile 2&1 说

8、明:2&1 2表示标准错误STDERROR,1表示标准输出STDOUT ,2&1表示将标准错误的 内容和标准输出的内容合并写入到$LogFile中,14,练习1,判断/tmp目录下是否有test.c文件,如果没有打印file not exists提示并在/tmp下自动创建一个test.c,如果存在则,往test.c中追加hello world字符串。,15,实例2-NMS启动停止脚本,脚本目的:将NMS的三个进程的启动组合在一个脚本中,实现一条命令启动、停止NMS程序 知识点1:函数使用 知识点2:分支循环 知识点3:传递参数,实例2-NMS启动停止脚本,知识点1:函数使用pid_status

9、()Spid=$(pidof NmsServer)Mpid=$(pidof NmsMsgServer)函数表示实现某个特定的模块的功能集合,函数格式由函数名,语句块。当定义了一个函数后,只有调用了函数时才会执行函数中的功能。当函数定义后,直接在shell中执行函数名则可。而函数执行是否成功则可以用return语句返回函数执行的状态。,17,实例2-NMS启动停止脚本,知识点2:分支循环 case分支当分支中需要执行多个判断测试时,则使用case分支的效率高于普通的ifelsefi分支,case分支对传递的参数判断后,执行判断后对应的语句。 while循环当需要重复执行多个命令时,则引入whil

10、e循环,同样也有for循 环,在循环中使用数值计算工具控制循环次数。,18,实例2-NMS启动停止脚本,知识点3:传递参数在执行shell脚本,可在shell提示符后传递参数值到shell脚本中,格式如下:command arg1 arg2 command表示脚本名,arg1, arg2表示传递的参数常量值,而在shell脚本中,脚本名用$0表示,紧接着后面的参数用 $1表示第一个参数常量,$2表示第二个参数常量。而当需要传递大于十个参数常量时则需用$格式表示,如第10个参数$10.在此nms.sh脚本中引用$1来传递start或stop字符串来决定脚本的执行功能,19,练习2,编写一个函数,

11、根据读入的命令参数来打印相应的输出,如读取start则打印出start字符串,读取stop则打印出stop,读取restart则先后打印stop,start,20,实例3-NMS事件接口脚本,脚本目的:解析处理外部程序传入的参数值 知识点1:awk与cut工具 知识点2:ifelsefi条件判断,实例3-NMS事件接口脚本,知识点1:awk与cut工具 awk对字符串按列处理,以列来分隔字符串,如AS_APPINSTANCE=$(echo $AS_APPINSTANCE|awk -F_ print $NF)使用AWK的内置变量NF表示field个数,在awk读取的文本字符串时每一行当做一个记录

12、,每一列按照指定的分隔符(Field Separator)分隔成多个域(field),默认分隔符为空格或TAB键,使用-F可以指定任意字符为分隔符。分隔后的域依次使用$0 $1 $2引用,分别表示每条记录中第一个、第二个、第三个域(列)。 cut工具多用来截断字符串,通常使用-d指定除空格或TAB键之外的字符为分隔符,-f参数截取第几域的内容。如:AS_APPCLASS_TMP=$(echo $AS_APPCLASS | cut -d_ -f1,2),22,实例3-NMS事件接口脚本,知识点2:ifelsefi条件分支 同前面实例2中提到的case分支类似,使用ifelsefi条件的扩展性较强

13、 。当有新的参数变量值需要判断时,常用此条件分支。 if true ;then执行语句块1 else否则执行语句块2 fi结束 true部分使用 条件判断,非0为true,0为false,在更新事件接口脚本时, 则按实际情况优化,比如在同一个AS_CLASS下的所AS_PARAMETER 都要赋同类型 的值时,则只对AS_CLASS做if判断即可。,23,练习3,判断AS_APPCLASS的变量值,如果以”_”作为分隔符,则判断其第一个分隔符后的字符是否为STORAGE,如果是,则截取AS_INSTANCE变量值中的最后一个字符串。 AS_INSTANCE的值的格式为xx-xx-xx AS_APPCLASS的值格式为XX_XXXX_XX,24,参考资料, LINUX与UNIX Shell编程指南,总结,通过学习本课程,我们主要学习了: shell条件分支循环的使用 shell重定向功能 shell函数定义、调用 shell参数值传递 通过学习本课程,我们掌握了: 定制shell启动脚本 掌握系统、数据库备份脚本 定制事件接口解析脚本,Question & Answer,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报