320 likes | 480 Views
Turbolinux 用户基础 课程内容. 第一章 什么是 LINUX 第二章 安装 TURBOLINUX 第三章 TURBOLINUX 工具 第四章 X 配置及疑难解答 第五章 运行级别与故障排除 第六章 文件系统基础 第七章 SHELL 使用指南 第八章 SHELL 进程与脚本 第九章 文档编辑工具 第十章 TURBOLINUX 应用程序. 第八章 Shell 进程与脚本. 本章内容: 命令解释程序 Shell 输入输出命令 管道和过滤器 Shell 脚本 编程语言. 本章要求. Linux 流、管道、重定向 通过文本处理过滤器处理文本流
E N D
Turbolinux用户基础 课程内容 • 第一章 什么是LINUX • 第二章安装TURBOLINUX • 第三章TURBOLINUX工具 • 第四章 X配置及疑难解答 • 第五章运行级别与故障排除 • 第六章文件系统基础 • 第七章SHELL使用指南 • 第八章 SHELL进程与脚本 • 第九章文档编辑工具 • 第十章TURBOLINUX应用程序
第八章 Shell进程与脚本 本章内容: • 命令解释程序Shell • 输入输出命令 • 管道和过滤器 • Shell脚本 • 编程语言
本章要求 • Linux流、管道、重定向 • 通过文本处理过滤器处理文本流 • 编写shell脚本程序
8.1 命令解释程序shell • shell: • 交互式:命令行解释与执行(CLI: command-line interpreter) • shell: 胡桃外壳 • 编程语言
各种shell的特点 • /etc/shells 列出Turbolinux系统中可以使用的各种shell
命令解释程序能做什么? • 为什么要使用bash? • 高级语言的结构(if, while, select等) • 支持对文件和目录的大量测试 • 支持整数运算 • 程序的开发速度更快 • 交互式命令历史机制可模仿两个最流行的Linux编辑器Emacs, vi • 支持函数编程 • 先进的模式匹配结构和分析复杂句子的能力
8.2 输入输出命令 • 标准输入输出 每一个Linux命令都有3个与之相关的输入输出流: • stdin 标准输入,键盘输入 • stdout 标准输出,显示输出 • stderr 标准错误输出:输出错误及诊断信息(也是显示输出)
重定向 重定向输出 >outfile 错误重定向输出 2>errorfile 两个输出流重定向到同一地方 2 > &1 stderr输出到文件(从左到右): >outfile 2>&1 stderr仍输出到屏幕: 2>&1>outfile
重定向 追加重定向输出 >>appendoutfile 2>>append_errfile 空设备的使用 >/dev/null 2>/dev/null 重定向输入 <infile
重定向写文件的安全性 • 不覆盖已存在的文件 set –o noclobber 打开不覆盖设置 set +o 显示所有设置 重定向输出机制: 若输出文件不存在,则创建; 若存在, 则执行命令之前会删除其内容. 若file1存在,则 ls > file1 文件覆盖出错 ls >| file1 成功 set +o noclobber 关闭不覆盖设置
练习 • P170 练习8-1:命令输入输出 • P171 练习8-2:更多的命令输入输出重定向
8.3 管道和过滤器 • 管道:与重定向作用类似,但工作原理不同。 who > tmpfile wc –l < tmpfile who | wc -l • 管道中的两个命令运行时并不知道它们的输入输出流是连接在一起的 • 管道中的两个命令要同步运行,以适应管道中数据的“传输” 用重定向 用管道
管道仅能操纵命令的标准输出流,标准错误输出必须重定向,以免在终端显示管道仅能操纵命令的标准输出流,标准错误输出必须重定向,以免在终端显示 • 管道可多次使用,以连接两个以上的命令 who | grep ttyp | wc –l ps –ef | grep bash | wc -l
过滤器 • 过滤器是一段程序(或一个命令) • 从标准输入中读数据(有些过滤器可从文件获取数据),然后写到标准输出中 • 通常会对输入数据进行处理,一个过滤器通常只执行一种功能
sort • 功能强大的排序程序 • 可按整行排序 • 可按关键字段排序(序号从0算起) • 分隔符可指定(-t) • 各字段可看作字符串(字符/字典)或数字(n) • 顺序/逆序(-r) • 小写字母转大写进行排序 sort +1n -2 +0r -1 lsf sort –t: +6 +0f -1 /etc/passwd
tr • 只能从标准输入中读入数据 • 如果读入的字符在第一个参数表中,则替换为第二个参数表中相应字符 参数表格式:[abc], [a-z], [A-Z], [A*5](表示AAAAA),[A*]自动拉长表2,使其与表1同长 … | tr –cs '[a-z]' '[\012*]' | sort | uniq
问题: 按文件大小倒序列出目录中大小和文件名项。 • 解答: 1、列目录、去除首行 2、将<TAB>换成空格 3、仅保留文件大小列和文件名列 4、排序 ls –l | tail +2 | tr –s '\t ' ' ' | • cut -d' ' –f5,9 | sort +0nr
练习 • P176 练习8-3:管道和过滤器 • P178 练习8-4:更多的管道和过滤器
8.4 Shell脚本 • LINUX——多任务——复杂——脚本在监视和调和复杂性方面扮演着重要的角色 • 脚本功能:与其他可执行程序一样的作用 • 可读取标准输入、写标准输出和标准错误输出 • 可打开和关闭文件 • 可打开数据库进行编辑 • 可完成命令行中可完成的任何事情 • LINUX系统引导后,初始化都由脚本处理 • 启动X Window系统通常也由脚本完成
脚本可以是文本文件,由编辑器创建或修改 • 脚本可以是任何以正确格式结束的文本流——一个脚本在运行时可创建并运行另一脚本,然后删除它(灵活) • 点命令 • . <命令>
运行脚本 • 创建一个脚本的4个步骤: • 确定要执行的动作 • 决定完成该动作使用什么命令 • 使用编辑器将命令序列存入文件 • 使用chmod命令将文件标记为可执行的
创建与运行脚本 指明使用什么SHELL来执行此脚本 $vi coresearch #!/bin/sh #codesearch – This little ditty finds core fines find $1 –name 'core' –print :wq $chmod +x coresearch $./coresearch /usr 或$coresearch /usr (放入PATH路径的目录中) 注释 参数,$0表示脚本自身的名字 命令行参数$1…$9
事务和注释 • 事务标志:#! • #!/bin/sh表示执行/bin/sh,程序的标准输入被重定向到脚本的其余部分 • 脚本的第一行应该总是#! • 注释:# • 好习惯
控制段 • 命令行: • 一条命令 • 一个管道 • 分号分隔的列表 • 条件执行 if … then … fi if … then … else …fi if … then … elif … then … else … fi
读用户输入 • for • exit • 用于脚本的任何地方 • 读用户输入read • echo "Enter your name: \c" • read NAME • echo $NAME
练习 • P183 练习8-5:Shell脚本 • P184 练习8-6:附加的Shell脚本 • P185 练习8-7:更多的Shell脚本
8.5 编程语言 • C和C++ • Perl • Python • TCL • PHP • Java • Lisp, Common Lisp, Scheme • Fortran
小结 • 命令解释程序Shell • 从命令行获得输入 • 功能强大的编程环境: • 标准输入输出流 • 重定向:>, >>, 2>, 2>>, 2>&1, <, >| • 管道 • 过滤器 • sort, tr, uniq, grep, cut • if-then-else-fi • If-then-elif-then-else-fi • for-in-do • Test/[[]]
作业 • P187