第6章 B-Shell及编程

上传人:我*** 文档编号:137911995 上传时间:2020-07-12 格式:PPT 页数:70 大小:305.50KB
返回 下载 相关 举报
第6章 B-Shell及编程_第1页
第1页 / 共70页
第6章 B-Shell及编程_第2页
第2页 / 共70页
第6章 B-Shell及编程_第3页
第3页 / 共70页
第6章 B-Shell及编程_第4页
第4页 / 共70页
第6章 B-Shell及编程_第5页
第5页 / 共70页
点击查看更多>>
资源描述

《第6章 B-Shell及编程》由会员分享,可在线阅读,更多相关《第6章 B-Shell及编程(70页珍藏版)》请在金锄头文库上搜索。

1、第6章 第1页,第6章 B-Shell及编程,第6章 第2页,主要内容,主要目的 编写shell脚本程序 交互方式下使用shell的流程控制,编写复合命令 主要内容 元字符,如:引号 shell的变量替换,命令替换,文件名生成 shell变量 流程控制 子程序,第6章 第3页,主要特点,主要特点 shell编程风格和C语言等算法语言的区别 shell是面向命令处理的语言,提供的流程控制结构通过对一些内部命令的解释实现 如同C语言设计思路一样,shell本身设计得非常精炼,但是它提供了灵活的机制 shell许多灵活的功能,通过shell替换实现 例如:流程控制所需的条件判断,四则运算,都由she

2、ll之外的命令完成,第6章 第4页,6.1 启动B-shell,第6章 第5页,启动交互式B-shell,启动方法 注册shell 键入sh命令进入了B-shell 自动执行的批处理文件 当sh作为注册shell被启动时,自动执行用户主目录下的.profile文件中命令,记作$HOME/.profile 类似umask之类的命令,应当写在.profile文件中,第6章 第6页,sh脚本的执行,编辑文件lsdir(格式为文本文件) #!/bin/sh if $# = 0 then dir=. else dir=$1 fi find $dir -type d print (参见p68) 执行这一脚

3、本(script)文件的方法: shlsdir sh lsdir chmod u+x lsdir; ./lsdir /bin 三种方法均启动程序/bin/sh,生成新进程,第6章 第7页,6.2 重定向与管道,第6章 第8页,输入重定向,filename 从文件filename中获取stdin 例如: sort telno.txt word 从shell获取数据直到再次遇到定界符word cat TOAST * Now : date * My Home Directory is $HOME TOAST 执行结果 * Now : Sat Jul 27 14:47:56 Beijing 2006

4、* My Home Directory is /usr/jiang 定界符所界定内容加工处理(等同双引号处理): 变量替换,命令替换 不执行文件名生成,第6章 第9页,输出重定向, filename 将stdout重定向到文件filename 2 filename 将文件句柄2重定向到文件filename 2 main() FILE *f = fdopen(5, w); if (f) fprintf(f, %s, msg); 原始I/O char *msg = Msg from file descripter 5n; main() write(5, msg, strlen(msg); ,第6章

5、 第13页,输出重定向(例3:程序执行),编译和执行 cc msg.c -o msg ./msg ./msg 5 cat config.ap #!/bin/sh echo Input IP address of server computer: c read addr ed myap.cfg /dev/null TOAST /SERVER .d i SERVER $addr . w q TOAST,第6章 第21页,脚本程序中的行编辑(2),$ ./config.ap Input IP address of server computer: 202.112.67.213 $ cat myap.

6、cfg ID 3098 SERVER 202.112.67.213 TCP-PORT 3450 TIMEOUT 10 LOG-FILE /usr/adm/myap.log $,第6章 第22页,环境变量和局部变量,默认类型 所创建的shell变量,默认为局部变量 内部命令export 局部变量转换为环境变量,例如: export proto 局部变量和环境变量 shell启动的子进程继承环境变量,不继承局部变量 子进程对环境变量的修改,不影响父进程中同名变量 相关命令set/env 内部命令set列出当前所有变量及其值 包括环境变量和局部变量 外部命令/bin/env列出环境变量及其值,第6章

7、 第23页,环境变量:shell/C程序,$chmod u+x stat.report; cat stat.report echo My Computer Connected to $proto Networks $ cc myap.c -o myap; cat myap.c main() char *envstr = getenv(”proto”); printf(”Protocol is %sn”, envstr ? envstr : “?”); $proto=TCP/IP $./stat.report 启动一个子进程sh My Computer Connected to Networks

8、 $./myap启动一个子进程myap Protocol is ? $export proto $./stat.report My Computer Connected to TCP/IP Networks $./myap Protocol is TCP/IP,第6章 第24页,系统的环境变量,创建 登录后系统自动创建一些环境变量影响应用程序运行 HOME:用户主目录的路径名 PATH:命令查找路径 与DOS不同的是,它不首先搜索当前目录 PATH=/bin:/usr/bin:/etc PATH=./:/bin:/usr/bin:/etc 先搜索当前目录 PATH=/:bin/usr/bin:

9、/etc:./ 后搜索当前目录 PS1和PS2:主提示符和副提示符sh 副提示符:当一个命令在一行内输不完需几行输入一个命令时,第2行及其它行用副提示符 TERM:终端类型 全屏幕操作的软件(如vi),使用它搜索终端库,第6章 第25页,6.4 替换,第6章 第26页,shell替换,Shell的替换工作:先替换命令行再执行命令 文件名生成 变量替换 命令替换 文件名生成 遵循文件通配符规则,按照字典序排列 如: ls *.c 文件名替换后实际执行ls a.c x.c 变量替换 ls $HOME echo ”My home is $HOME, Terminal is $TERM”,第6章 第2

10、7页,shell替换:命令替换,用反撇号 now=date 以命令date 的stdout替换date ./arg date 实际执行 ./arg Sun Dec 4 14:54:38 Beijing 2006 frames=expr 5 + 13 echo $frames 18 count=10 count=expr $Count + 1 echo $count 11,第6章 第28页,shell内部变量:位置参数,$0 脚本文件本身的名字 $1 1号命令行参数 $# 命令行参数的个数 $* ”$1 $2 $3 $4 .” $ ”$1” ”$2” ”$3” ,第6章 第29页,位置参数使用举

11、例,$ cat param echo $# echo Usage: $0 arg1 arg2 . ./arg $ ./arg $* $ ./param Copy Files to $HOME 4 Usage: ./param arg1 arg2 . 0:./arg 1:Copy 2:Files 3:to 4:/usr/jiang 0:./arg 1:Copy Files to /usr/jiang,第6章 第30页,6.5 元字符,第6章 第31页,shell元字符(1),空格,制表符 命令行参数的分隔符 回车 执行键入的命令 | 重定向与管道 (还有|) ; 用于一行内输入多个命令(还有;)

12、 ls -l file list vi 2 在当前shell中执行命令表list 注意:左花括号后面必须有一个空格 与()的区别 如果将上例中的 改成(),那么执行结果如下: /usr/jiang Current Directory is /usr/bin 400 files /usr/jiang,第6章 第48页,复合命令:举例,使用时,多行并为一行不要漏掉必需的空格和分号 -f core ,第6章 第49页,条件结构if,语法 if condition then list elif condition then list else list fi 其中if/then/elif/else/f

13、i为关键字(内部命令) 当条件判断后需要两个或多个分支时, then,第6章 第51页,case结构,基于文件名匹配基础上的多条件分支,语法: case word in pattern1) list1; pattern2) list2; . esac word与pattern匹配:使用shell的文件名匹配规则 ;是一个整体,不能在两分号间加空格,也不能用两个连续的空行代替 可以使用竖线表示多个模式 word与多个模式匹配时,执行遇到的第一个命令表,第6章 第52页,case结构:举例,语法 case $1 in START|start) . (一段程序) ; STOP|stop) . (一段

14、程序) ; *) echo Usage: $0 start|stop ; esac 注意:本例中case句中$1要加上双引号,第6章 第53页,6.7 循环结构,第6章 第54页,while结构,语法 while condition do list done 例1 while test -r lockfile do sleep 5 done 下例有错 while test -r lockfile do sleep 5 done 例2 while -r lockfile ; do sleep 5;done,第6章 第55页,命令expr:表达式计算,功能:求表达式的值 shell本身不提供数学运

15、算和字符串运算的能力,这些运算借助命令expr完成 算数运算 + - * / % () 注意 应该转义的地方必须加反斜线转义 应该有空格的地方不允许漏掉。 例1:求变量a*(b+c) 正确的写法为 expr $a * ( $b + $c ),第6章 第56页,命令expr:算数运算(例),if $# = 0 then echo Usage: $0 : else count=$1 while $count -gt 0 do count=expr $count - 1 echo -e 015 $count c sleep 1 done fi,第6章 第57页,命令expr:字符串运算,用法: ex

16、pr string : pattern 正则表达式pattern匹配字符串string,打印匹配长度 pattern中用(和)括起一部分,能匹配时打印括号内能匹配的部分,否则为空字符串 举例 expr 123 : 0-9* 结果为3 expr A123 : 0-9* 结果为0,第6章 第58页,命令expr:字符串运算(例),设tty命令输出类似/dev/tty6的结果 expr tty : /dev/tty(.*) expr tty : /dev/tty(.*) termno=expr tty : /dev/tty(.*) expr $unit : .* 返回变量unit的长度 expr pwd : .*/(/*)$ 截取路径名的最后一个分量,第6章 第59页,for结构,语法1 for name in word1 word2 . do list done 语法2 for name do list done 相当于 for na

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号