当前位置:
文档之家› 第5章C-shell的交互功能
第5章C-shell的交互功能
第5章 C-shell的交互功能
UNIX的shell
shell种类
B-shell:/bin/sh,是Stephen R. Bourne在贝尔实验室 开发的最早被普遍认可的UNIX的标准shell C-shell:/bin/csh,加利福尼亚大学的William N. Joy 在20世纪70年代开发,最初用在BSD2.0上 K-shell:/bin/ksh,贝尔实验室的David Korn在1986 年开发,是B-shell的超集,支持带类型的变量,数组 Bourne Again shell:/bin/bash,是LINUX上的标准 shell,兼容并扩展了B-Shell,吸收了C shell的某些特 点,命令行编辑非常方便
第5章 C-shell的交互功能
本章小节
5.1 5.2 5.3 5.4 5.5 5.6 UNIX的shell csh启动与终止 使用csh的历史机制 别名 csh提示符 csh的管道和重定向
第5章 C-shell的交互功能
5.1 UNIX的shell 5.2 csh启动与终止
第5章 C-shell的交互功能
第5章 C-shell的交互功能
UNIX的shell
用户shell
管理员在创建用户时,在/etc/passwd文件中 设置了用户的登录shell,用户登录后即进入注 册的shell。 某/etc/passwd文件的片断如下:
tian:x:1289:100::/usr/tian:/bin/csh jiang:x:1306:100::/usr/jiang:/bin/sh liang:x:2167:100::/usr/liang:/bin/ksh sun:x:1283:100::/usr/sun:/bin/sh
第5章 C-shell的交互功能
缓冲I/O和系统调用I/O编程示意图
标准输出 stdout,fd=1 标准输入 stdin,fd=0
程序
标准错误输出 stderr,fd=2
【例5-2I/O的标准输出和标准错误输出
第5章 C-shell的交互功能
第5章 C-shell的交互功能
输入输出重定向
输出重定向
4. >!文件,>&!文件:若文件已存在则强制覆盖掉原文件; 否则创建 5. >>!文件和>>&!文件:若文件不存在,强制创建;否则 追加到尾部 注:对于第1~3种重定向,csh的noclobber(不销毁) 开关会有影响。设置或取消noclobber开关的命令分别 是: set noclobber unset noclobber
第5章 C-shell的交互功能
别名机制举例
定义别名
alias dir "ls -flad" alias n "netstat -p tcp -s | head -10" alias r "netstat -rn" alias h "history" alias rm 'rm -i' alias p 'ping 202.143.12.189' alias rt 'traceroute 217.226.227.27
第5章 C-shell的交互功能
noclobber开关对重定向的影响
重定向 noclobber 开 >文件 >&文件 关 开 >>文件 >>&文件 关 文件状态 不存在 存在 不存在 存在 不存在 存在 不存在 存在 结果 创建 出错 创建 覆盖原文件 出错 追加 创建 追加
第5章 C-shell的交互功能
UNIX的shell
shell的主要功能
作为交互式的命令解释器,是用户与系统之间的接口
支持文件名替换,命令替换,变量替换 支持管道和重定向操作
有流程控制的内部命令,支持程序设计
内部命令与外部命令
内部命令:在shell内部实现的命令 外部命令:shell之外用程序文件实现的命令 外部命令执行时需要搜寻程序文件并装入执行,因此 运行效率不如内部命令
第5章 C-shell的交互功能
5.6 csh的管道和重定向
第5章 C-shell的交互功能
概述
管道
是进程之间通信的一种机制,shell利用此机制在命令 之间传递输入和输出。管道操作符用竖线|表示,作用 是使竖线前面的命令输出成为竖线后面的命令输入。
重定向
shell改变了它所执行的进程拥有的文件描述符,主要 是标准输入/输出/错误描述符,以便使进程原来的输入 输出对象切换到新的对象
cc -c try.c -o try |& more
第5章 C-shell的交互功能
管道示意图
cmd1 | cmd2
cmd1 |& cmd2
管道和重定向实际上是shell利用进程之间的父子 关系实现的,第7章详述之
第5章 C-shell的交互功能
缓冲I/O和系统调用I/O
程序操作文件的两种模式
标准的缓冲I/O方式:这种方式间接利用系统调用实现 有缓冲的标准输入输出/错误输出,它是由标准I/O库函 数提供的,库预定义变量stdin、stdout和stderr代表标 准输入输出/错误输出文件I/O流给程序员直接使用。 系统调用的方式:shell通过系统调用打开标准输入输 出/错误输出文件描述符,其值分别为0,1,2。由于父 子进程文件描述符的继承关系,此种编程方式下这三 个描述符可直接使用,无需打开。
第5章 C-shell的交互功能
csh的启动与终止
启动
csh的启动方法有两种:作为注册shell和直接执行命 令csh。前者在启动后将自动执行用户主目录中 的.cshrc和.login脚本程序,而后者仅执行.cshrc,其目 的是初始化执行环境。 不同用户有不同的主目录和初始化脚本程序,因此可 以安排执行不同的初始化操作
重定向示意图
> filename
>& filename
第5章 C-shell的交互功能
管道
cmd1 | cmd2
把命令cmd1的stdout管道成cmd2的stdin ps -ef | grep liang
cc -c try.c -o try | more
cmd1 |& cmd2
把cmd1的stderr合并到stdout然后管道成 cmd2的stdin
输入输出重定向
输入重定向
<filename 从文件filename中输入
输出重定向
1. >文件:把stdout重定向到一个文件中,不影响stderr 仍然在终端输出
2. >&文件:把stderr合并到stdout,再重定向到一个文 件中。 3. >>文件或>>&文件:若文件不存在,则创建;若文件 已存在则追加到文件尾。
第5章 C-shell的交互功能
别名机制
csh的别名机制
可以为经常使用的命令取一个别名,以提高输入效率 或便于记忆。例如,可以为经常使用的命令取单字符 的别名,也可以为不便记忆的命令取含义明确的名字。 定义别名 alias 别名 替换命令 (不带参数则显示当前别名表) 取消别名 unalias 别名
终止
作为注册的csh终止时,要执行用户主目录中 的.logout退出脚本
第5章 C-shell的交互功能
5.3 使用csh的历史机制 5.4 别名 5.5 csh提示符
第5章 C-shell的交互功能
历史表
csh的历史机制
将最近一段时间内输入的命令保存起来,以便重复使 用或作少量后继续使用,避免了将命令重新输入的麻 烦。 前后键入的命令按顺序存于历史表,编号递增。 历史表大小有限,其上限值保存在变量history中,可 用命令set history=n设定。超出限制时,按FIFO的原 则抛弃命令 使用内部命令history可查看历史表 引用历史表:见[表5-1] C-shell历史替换的方法
给别名传递参数
简单传递:dir ~ 复杂传递:【例5-1】 给别名命令传递参数的方法
第5章 C-shell的交互功能
csh提示符
csh的提示符由csh的变量prompt控制
prompt变量值(是一个字符串)中的!,在实 际显示时以命令号代替。 set prompt="[\!]%" 在!前加\以取消csh对!的特殊解释,实际上 变量prompt的值为[!]%串