SHELL编程讲义.doc
《SHELL编程讲义.doc》由会员分享,可在线阅读,更多相关《SHELL编程讲义.doc(20页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、【1】SHELL范式规定一个范式,有利于统一程序风格,增加可读性。对于编写SHELL,拷贝修改即可。范式:ASSIGN SHELL/指定壳DESCRIPTION/程序说明BODY/程序体扩展:1 ASSIGN SHELL/指定壳,如果不指定壳,默认使用Bourne SHELL,建议使用KSH#!SHELL路径1.1 CSH#!/bin/csh1.2 BSH#!/bin/sh1.3 KSH#!/bin/ksh2 DESCRIPTION/程序说明#PROCEDURE NAME/程序名称#PROCEDURE FUNCTION/程序功能说明#AUTHOR/作者#DATE/开发时间#INPUT/输入#O
2、UTPUT/输出#CALL/调用函数说明#HISTORY/变更历史3 BODY/程序体INCLUDE LIBRARY /包含库文件VARIABLE DEFINE/变量定义FUNCTION DEFINE/函数定义MAIN/程序入口3.1 INCLUDE LIBRARY /包含库文件. LIBRARY FILE/库文件名称3.2 FUNCTION DEFINE/函数定义#FUNCRION: FUNCTION NAME#DESC : FUNCTION DESC#INPUT : INPUT DESC#OUTPUT : OUTPUT DESCFUNCTION()3.3 MAIN/程序入口(建议为)程序启
3、动说明程序执行步骤程序结束exit 0范式样例:#!/bin/ksh # 程序名 : update.sh # 功能简介: 本程序完成WINV200R002M1D039P2升级# 作者 : zhongwei/20150 # 开发时间: 2002-05-05 # # 函数说明: 函数定义# CheckBackupDir()检查备分目录,不完毕则创建# CheckDbinstallDir()检查SMP的数据库安装脚本目录# CheckIfUpgraded()检查是否已经升级# UpdateSMPDir()升级SMP的目录结构# BackupDb()备分数据库的脚本、数据# BackupFile()备
4、分SMP目录的文件# UpdateDb()升级数据库 # UpdateFile()升级文件 # 修改历史: First Programming # 日期 :# 作者 :# 修改说明:#应用库函数,要求库函数文件与当前SHELL同一目录. ./comm_func.sh.rc#定义变量#程序名称ProgName=SMP Platform Upgrade#标题Title=WINV200R002 D039P2#目录和文件定义WorkDir=pwdLogDir=$WorkDir/logTempDir=$WorkDir/temp#日志与标志文件ErrFile=$LogDir/update.errLogFi
5、le=$LogDir/update.logFlagFile=$LogDir/flag.flg#函数定义# 函数:PrintUsage# 目的:定义打印用法函数。# 输入:# 输出:屏幕#PrintUsage() echo * echo NAME : $ProgName echo VERSION : $Title echo SYSTEM : WIN SMP echo DESC : SMP platform or service upgrade echo NOTICE : echo COPYRIGHT : 2002, HUAWEI Tech. Co. Ltd. echo * echo 1. Exe
6、cute backup operation echo 2. Execute upgrade operation echo 3. Execute rollback operation echo 0. Exit echo Please input operation choice 0-3:# Main #exit 0# END OF PROCEDURE #【2】SHELL编程格式与语法Script是以行为单位,我们所写的Script会被分解成一行一行来执行。而每一行可以是命令、注解、或是流程控制指令等。如果某一行尚未完成,在行末加上 ,这个时候下一行的内容就会接到这一行的後面,成为同一行。当Scr
7、ipt中出现#时,再它後面的同一行文字即为注解,Shell会对其翻译。 在Script中要执行一个命令的方法和在命令列中一样,你可以前台或后台执行,执行命令时也会需要设定一些环境变量。 Script的流程控制和一般高级语言的流程控制没有什麽两样,也和高级语言一样有副程式。这些使得Script的功能更加强大。 2.1 SHELL基本术语与关键字. 当前shell程序相同目录. 当前shell程序的上一级目录break 退出for、while、until或case语句cd 改变到当前目录continue 执行循环的下一步echo 反馈信息到标准输出eval 读取参数,执行结果命令exec 执行命令
8、,但不在当前shellexit 退出当前shellexport 导出变量,使当前shell可利用它pwd 显示当前目录read 从标准输入读取一行文本readonly 使变量只读return 退出函数并带有返回值set 控制各种参数到标准输出的显示shift 命令行参数向左偏移一个test 评估条件表达式times 显示shell运行过程的用户和系统时间trap 当捕获信号时运行指定命令ulimit 显示或设置shell资源umask 显示或设置缺省文件创建模式unset 从shell内存中删除变量或函数wait 等待直到子进程运行完毕,报告终止2.2 变量 Shell的类型只有字串变量,所以
9、要使用数值运算则必须靠外部命令达成目的。而其变量种类有下列几种: 1. 普通变量 这是最常使用的变量,我们可以任何不包含空白字元的字串来当做变量名称。 设定变量值时则用下列方式: var=string #不能是var = string,即等号两边不能有空格。与判断语句正好相反,判断语句表的=或者其他符号两边必须有空格,否则为赋值运算取用变量时则在变量名称前加上一$ 号,或者$name。 name=Tom echo nameecho $name 结果如下:nameTom2.环境变量和使普通变量相似,只不过此种变量会将其值传给其所执行的命令。要将一使 用者变量设定为系统变量,只要加上: expor
10、t var或者export var=var_value 或者setenv var var_valuedname=Tomexport name以下是使用者一进入系统之後就已设定好的系统变量: $HOME 使用者自己的目录 $PATH 执行命令时所搜寻的目录 $TZ 时区 $MAILCHECK 每隔多少秒检查是否有新的信件 $PS1 在命令列时的提示号 $PS2 当命令尚未打完时,Shell要求再输入时的提示号 $MANPATH man 指令的搜寻路径 3. 只读的使用者变量 和使用者变量相似,只不过这些变量不能被改变。要将变量设成只读的 ,只要加上: readonly var 而若只打reado
11、nly则会列出所有只读的变量(ksh支持readonly命令。csh不支持,但是在shell程序中可以使用readonly修饰某个变量)。还有一点,系统变量不可以设定成只读的。 name=Tom readonly nameecho $namename=Johnecho $name(假设文件保存为aa)结果如下:aaaaa4: name: This variable is read only4. 特殊变量 有些变量是一开始执行Script时就会设定,并且不以加以修改,但我们不叫它只读的系统变量,而叫它特殊变量,因为这些变量是一执行程式时就有了,况且使用者无法将一般的系统变量设定成只读的。以下是一
12、些等殊变量:$0 这个程式的执行名字 $n 这个程式的第n个参数值,n=1.9 $* 这个程式的所有参数 $# 这个程式的参数个数 $ 这个程式的PID $! 执行上一个背景指令的PID $? 执行上一个指令的返回值 $n,n只能为0-9的原因,是Bourne Shell的位置参数变量为$1$9, 因此通过位置变量$n只能访问前9个参数。当你执行这个程式时的参数数目超过9 时,我们可以使用shift 命令将参数往前移一格,如此即可使用第10个以後的参数。除此之外,可以用set 命令改变$n及$*,方法如下: set string 如此$*的值即为string,而分解後则会放入$n。如果set命
13、令後面没有参数, 则会列出所有已经设定的变量以及其值。 echo Filename: $0echo Arguments: $*echo No. of args.: $# echo 2nd arg.: $2 shift echo No. of args.: $#echo 2nd arg.: $2 set hello, everyone echo Arguments: $* echo 2nd arg.: $2 结果如下:Filename: ex1Arguments: this is a testNo. of args.: 42nd arg.: isNo. of args.: 32nd arg.:
14、aArguments: hello, everyone2nd arg.: everyone5. 数组变量 (ksh支持)nameindex=value其中name为数组名称,index为数组下标,在ksh中数组最大支持1024,即index为01023.或者set A name value1 value2valuen引用数组变量$nameindex应用所有项:$name* #或者$name如:set A ser pps ppip mvpnecho $ser2echo $ser*打印为:mvpnpps ppip mvpn如:set A ser pps ppip mvpnecho $ser2ech
15、o $ser*打印为:pps2pps*6. SHELL变量 SHELL程序中可以直接使用一些变量。常用有:SECONDS#ftp程序中判断超时经常使用这个变量IFS#域分割符,缺省为空格或者TAB键,可以由用户指定2.3 引用某些字符在SHELL中具备特殊的含义:如:& * + $ | ? ; 可以使用双引号或者单引号或者去掉特殊字符的含义,使成为一个普通字符.1) ”可以去掉除$, , 之外的所有特殊字符的含义。比如:echo * #输出当前某个的所有目录与文件echo “*”#输出*字符echo “date”#输出为date命令打印的时间“Tue Sep 17 11:31:58 MDT 2
16、002”echo “$PATH”#输出当前用户的搜索路径echo “ana”#输出为2行,一行一个a,此时为特殊字符2) 单引号可以去掉去掉引号以内包含的任何特殊字符的含义,使成为一个普通字符.比如:echo *#输出*字符echo date#输出dateecho $PATH#输出$PATHecho ana#输出为2行,一行一个a,此时为特殊字符3) 可以去掉& * + $ | ?的特殊含义,本身的特殊含义可以用去掉,比如后面一个就是普通字符如:echo *#输出*2.4 标准输入与输出当我们在shell中执行命令的时候,每个进程都和三个打开的文件相联系,并使用文件描述符来引用这些文件。由于文
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SHELL 编程 讲义
限制150内