




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Shell Programming, UNIX Shell程序设计,Shell的双重特性:,命令解释程序(命令解释器): Shell解释用户输入的命令行,提交系统内核 处理,并将结果返回给用户; Shell与UNIX命令一样都是实用程序,但有区 别。一旦用户注册到系统后, Shell 就被系统装 入内存,并一直运行到用户退出系统之止;而一 般命令仅当被调用时,才由系统装入内存执行。 程序设计语言: Shell本身也是一种可编程的程序设计语言。,做为用户与Unix系统内核之间的界面,Shell接受、解释并执行用户命令。 Shell执行用户命令的工作过程大体上表现为这样一个循环: while (1
2、) prompt(“command: ”); /* 打印提示符 */ read(command); /* 读入并分析命令 */ execute(command); /* 执行命令 */ ,4.1 命令解释程序,执行一个shell命令行时,通常会自动打开三个标准文件,即: 标准输入文件(stdin),通常对应终端的键盘; 标准输出文件(stdout)和标准错误输出文件(stderr),这两个文件都对应终端的屏幕。 进程将从标准输入文件中得到输入数据,将正常输出数据输出到标准输出文件,而将错误信息送到标准错误文件中。 以上三个标准文件的文件标识符分别为0号、1号、2号。,4.1.1 输入输出重定向
3、,当标准文件描述符被分配给终端以外的对象,就称为I/O重定向, 由 “”、 “” 、 “” 、“”等符号完成。,$ ls -l $ ls -l mydirlist $ pwd mydirlist $ pwd mydirlist $ date mydirlist $ cat file1 file2 file3,用 , 等符号改变标准流的方向,分析以下命令的结果:,$ ( ls l; pwd; date ) mydirlist,$ mail tom file $ myprog testdatafile $ command string ,为“行输入重定向”,较少使用。,$ myprog outfi
4、le /*同时使用输入输出重定向 */,如果将标准输出和标准错误输出流都定向到同一文件,B Shell中用2 分隔命令,标志命令结束,但不换行 若errorfile不存在,则记下日期、时间并给出无错误提示一并写入datelog中。,#!/bin/sh # 例2 checkerr.sh date datelog if test -r errorfile then cat errorfile datelog rm errorfile else echo “No error this hour.” datelog fi,例3:,# !/bin/sh # 例3 根据一天中的不同钟点给出不同的问候消息
5、hours=date | cut -c12-13 if $hour -lt 12 then echo “Good morning !” else if $hour -lt 18 then echo “Good afternoon !” else echo “Good evening !” fi fi,2)case分支:实现多选一控制结构的另一种方法,语法:case word in pattern 1) pat1 -list1; pattern 2) pat2 -list2; *) default -list; esac,其中:word将与各匹配模式比较,“;”符表示匹配结束,“*”号为通配符。
6、,#! /bin/sh echo -n “Which color do you like?” read color case “$color” in Bbl?) echo I feel the sky is $color ; Ggree*) echo $color is for trees ; red | orange) echo $color is very warm! ; *) echo No such color as $color; esac echo “Out of case”,case “$choice” in 1) TERM=vt120 export TERM ; 2) TERM
7、=AT386 export TERM ; 3) TERM=sun export TERM ; esac echo “TERM is $TERM.”,4.2.5 循环语句,循环语句完成命令的重复执行,1)for 循环, 常用于循环次数确定的情况 语法:for var in word1 word2 wordn do commands done 当变量值在列表中,执行一次所有命令,使用变量名访问列表中取值。in 列表可选,如果不用它,则for循环使用脚本运行的位置参数。 for 循环中可根据需要进行嵌套,例1:列出用户注册目录下的cc和work子目录中所有 .c 和 .h文件。,# !/ bin/s
8、h # 显示.c和.h文件 cd $HOME for dir in cc work do echo “.in $dir.” cd $dir for file in *.ch do ls -l $file done cd done,2) while 循环,以命令表的出口状态为判别条件,决定循环体中的命令是否执行。语法结构: while 条件表达式 do cmdlist done,格式 : until 条件表达式 do cmdlist done,3) until 循环,until与while循环的差别在于: 对于循环出口状态的判定采取不同的处理策略,#!/bin/sh while $# -gt 0
9、 do echo $* shift done,$ ./scriptname a b c d e a b c d e b c d e c d e d e e,#!/bin/sh until who | grep linda do sleep 10 done talk lindadragonwings,break 命令 break是Shell的内部命令,用于在循环体中根据命令运行的返回条件,直接终止循环体内命令的执行。当执行break命令时,控制流从循环体中转移到done之后的第一条命令上。 continue 命令 continue也是Shell的内部命令,用于在循环体中根据命令运行的返回条件,直
10、接进入下一次循环命令的执行。当执行continue命令时,控制流直接转到本循环体中第一条命令上。,4.2.6 改变循环,while true do echo “Are you ready to move on?” read answer if “$answer” = Y -o “$answer” = y then break else #commands fi done print “Here we go ”,#!/bin/sh for name in cat maillist do if “$name” = “richard” then continue else mail $name me
11、mo fi done,4.2.7 Shell 函数,函数定义 函数调用 参数传递 函数文件 函数的载入和删除 函数返回状态,函数定义:,3)函数允许将一组命令集或语句形成一个可用块,这些块称为shell函数。,3)定义函数的格式为: 函数名 ( ) 命令1 命令2 ,function 函数名 ( ) 命令1 命令2 ,#!/bin/bash #hellofunc function hello( ) echo “Hello, today is date” return 0 ,函数可以放在同一个文件中作为一段代码,也可以放在只包含函数的单独文件中。,#!/bin/bash #func functi
12、on hello( ) echo “Hello, today is date” echo “now going to the function hello” hello echo “back from the function”,函数调用:,#!/bin/bash #func function hello( ) echo “Hello, $1, today is date” echo “now going to the function hello” hello myfriend echo “back from the function”,参数传递:,向函数传递参数,与在脚本中使用位置变量$1
13、, $2, $9 类似。,#!/bin/bash #func #source function . hellofunc echo “now going to the function hello” hello echo “back from the function”,函数文件:,#!/bin/bash #hellofunc function hello( ) echo “Hello, today is date” return 0 ,#!/bin/bash #func #source function . hellofunc echo “now going to the function h
14、ello” hello echo $? echo “back from the function”,函数返回状态值:,#!/bin/bash #hellofunc function hello( ) echo “Hello, today is date” return 0 ,4.2.8 Shell 程序的调试,1)交互调试 先用命令验证,再引入shell编程中,2)在编辑过程中执行程序 打开多个窗口,边编辑边执行,3)用shell程序跟踪执行 使用shell的 -v,-x选项可对shell程序进行跟踪,我们可以了解到,在Shell程序设计语言里的基本操作仍然是UNIX系统命令,它是UNIX系统
15、中最有生气的部分,而且对于UNIX系统的使用极为重要。,运行级别脚本介绍,运行级别 inittab 启动应用程序,Linux启动流程,从BIOS到KERNEL MBRKERNELKERNEL自解压内核初始化内核启动(start_kernel函数,在linux内核源代码树的/usr/src/linux/init/main.c中) 2. 内核启动:创建1进程并执行,由它创建若干内核线程(kernel thread),然后装入并执行程序/sbin/init(变成一个用户进程)。此后,init根据/etc/inittab配置文件来执行相应的脚本进行系统初始化,如设置键盘、字体,装载模块,设置网络等 对
16、于Redhat来说,执行的顺序为: /etc/rc.d/rc.sysinit #由init执行的第一个脚本 /etc/rc.d/rc$RUNLEVEL#$RUNLEVEL为缺省的运行模式 /etc/rc.d/rc.local #运行模式2、3、5时会运行的脚本 /sbin/mingetty(或getty)#等待用户登录 /etc/inittab中指定了系统的运行级别(RUNLEVEL),init根据运行级别启动相关的服务(一些后台进程),实现不同的功能。 RUNLEVEL:06 0:halt, 1:单用户,2:多用户,3:多用户并启动NFS服务 4:保留,5:运行xdm(X window)以图
17、形界面方式登录 6:reboot,运行级别,运行级别目录 (/etc/rcN.d) 当前运行级别(runlevel) 运行级别目录的文件格式 (SXXscript, KXXscript),inittab,运行级别控制文件 (/etc/inittab) 修改inittab文件,/etc/inittab 的书写格式: Id:runlevels:action:process Id:惟一标志字段,2-4个字符长 runlevels:定义本行适用运行等级 action:采取的行动 process:应该运行的进程,多个运行等级可以写在一起: 如:id:13:action:process arguments 动作选项:,inittab中:si:sysinit:/etc/rc.d/rc.sysinit, 这个脚本优于其它进程运行 设置:主机名称,启动交换分区,检查文件系统,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024河南省三门峡中等专业学校工作人员招聘考试及答案
- 2024洞口县凤凰职业技术学校工作人员招聘考试及答案
- 护理工作计划2025
- 租赁合同范本-铲车租赁专用
- 网络安全保障协议:企业信息安全防护合同
- 软件开发与维护合同模板
- 数控加工工艺与编程试题(含参考答案)
- 农业与财务管理的结合
- 研学基地参加创业比赛全程纪实
- 维保安全培训
- 姬灵羊胚胎多肽口服液课件
- 仿生原理与创新设计课件
- 小学英语《I could eat a horse》优质教学课件
- 22、小便斗-工程建筑类
- 《灭火器维修》GA95-2015(全文)
- 学校学生特异体质调查表
- vmvare虚拟化平台巡检细则和方法
- 市政工程监理规划范本(完整版)
- 法院办公室廉政风险防控责任清单
- 并联高抗中性点小电抗补偿原理分析及参数选择方法
- 水蛭深加工提取天然水蛭素项目资金申请报告写作模板
评论
0/150
提交评论