首页 | Linux 基础 | 资讯动态 | Linux 应用 | Linux 服务器 | Linux 开发 | Linux 安全 | 专题 | 联盟论坛
  当前位置:主页>Linux 开发>文章内容
UNIX的Shell命令详解
来源:www.unix5.com 作者:riechelr_hl 发布时间:2007-05-20  

1. 输出入转向

在 UNIX 中,每一个 process 均有三个特殊的 file descriptor , 标准输入
( standard input )、标准输出 ( standard output )、标准错误输出( standard
error )。这三个平常是接受 terminal 的输入,而由 terminal 显示出去。但是
UNIX 提供使用者可以使用一般的档案或 pipe 来取代这些标准输出入设备。在
tcsh 里头,使用者可以利用">"和"<"来进行输出入转向的工作。

输出转向:
command > file

你可以把一个指令的输出结果转向到一个档案,让此档案储存这个 command
的输出结果。

但是请注意,如果 file 已经存在在系统中,则 file 把会被盖过。也就是
原先 file 的内容把会消失。

command >& file

与 > 相同,但是这个格式表示连 standard error 一起转向。在 UNIX 中,
standard error 在 programer 的习惯是用来显示 error 的发生,因此如果
没有被转向时, standard output 的结果把会被转向到 file ,而 standard
error 的结果仍把显示在 terminal 上。

command >> file

此格示代表把 standard output 的结果 append 到 file 中。如果 file 已
存在在系统中,则 standard output 的结果把会加到 file 的末端,如果 file
原先并不存在,则 file 把会被开启而把 standard output 的结果存至 file
中。

command >>& filE

同上,不过此格式代表连 standard error 一起 append 到 file 之中。

输入转向
command < file

一般程式须要自终端机输入资料,而你可以把程式所要输入的资料统一
编入档案中,利用转向一并输入。

set ignoreeeof
由於转向输出会有把现有档案 overwrite 的危险,csh 与 tcsh 提供使用
者一个方式来避免。

当你执行 set ignoreeeof 之後,如有输出转向到已存在之档案时,它会
发出一个档案已存在的讯息。 而在处理 append 转向上,如果已经 set
ignoreeeof ,则当要 append 一个不存在的档案,把会出现一个 error
messege 。

然而如果我们当真是要转向盖过一个已存在的档案,或者是要 append 一
个不存在的档案时,又要怎么样呢?

我们只要在 ">" ">&" ">>" ">>&" 後面加上惊叹号"!",成为 ">!" , ... 就
可以了。

2. Pipe

如同前面说的转向,Pipe 也是在标准输出入和标准示误装置间作取代动作,如
此一来可以把某一个程式的输出连到另一个程式的输入中。其语法如下:

command1 | command2 [ | command3 ....]
command1 |& command2 [ |& command3 ....] <--- 连 standard error 一起 pipe


3. 前景与背景

在 sh 下面,一个新产生的 process 可以经由 command 後面的符号';'和'&'来分
别前景和背景。如以下语法

command

这表示产生一个 foreground 的 process ,你要等到它结束才能再下另一个指
令。

command &

这样表示产生一个 background 的 process ,它会给你一个类似以下的讯息:

[1] 21304

然後就出现下一个提示号,以供你给下一个指令。然後在这个 background 的
process 结束的时候再给你一个如下面的讯息,告诉你它把这个 process 执
行完毕了。

[1] Done command

command1 ; command2 ; command3

这样表示你要求系统连续执行 command1 , command2 , command3 三个指令,
其中 command2 要等待 command1 , command3 要等待 command2 ,而你要等
待 command3 执行完毕才能下指令。

command1 & command2 & command3 &

这样表示你要求系统连续执行 command1 , command2 , command3 三个指令,
而这三个指令都放在背景执行,彼此之间不需等待。

fg 与 bg

也许你会问,一个已经执行的 process 可不可以由前景换背景,或由背景换
前景呢?

可以的。一个在前景执行的 process ,你可以按 Ctl-Z 把 process 暂停,
系统会给你一个讯息:

Suspended

然後出现提示号。此时你可以使用 fg 把其恢复前景执行,或按 bg 把其改为
背景执行。

而如果有一个 background 的 process , 你也可以用 fg 指令把其呼叫到前景
来。首先你需用 jobs 指令来观查目前有多少在背景下的 proesses,然後根据
它所显示出来的 job id 来决定把那一个 process 放到前景。如使用

% fg %3 # 把第三个 job 放到 foreground 。

4. 别名 alias

在 csh 与 tcsh 中,提供 alias 的功能,使得使用者可以把常用却冗长的
指令以其他的名字存起,不过不须像储存变数一样要在前面加一个"$"。

alias 的格式:
alias aliasname string ....
alias aliasname 'string \!* string'

前面的一个格式是把 aliasname 直接用来取代後面的 string ,然後如有任何
跟在後面的 argument 把会出现的其後。如下例:

% alias la ls -Fa

例中的 la . 相当於 ls -F . ,然而如果仅是如此并不足够,因此有後面的另
一种格式。後面的格式中的 \!* 代表把来会出现在 aliasname 後面的所有参数,
如下例:

% alias dir 'ls -Flag \!* | more'

例中的 dir doc 相当於 ls -Flag doc | more ,这样可提供使用者在设计上更大
的弹性。

5. tcsh 的初始设定档

tcsh 有两个 initial 档,一个是 $HOME/.tcshrc , 一个是 $HOME/.login 。

每一个 tcsh 在被开启时,它都会去执行所有位於 .tcshrc 中的命令,因此你

共2页: 上一页 1 [2] 下一页
 
如果您对本文有任何疑问或者建议,请到论坛讨论区发表您的意见: >> 论坛入口
[收藏] [推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
  热点文章
·嵌入式Linux系统下图形库讲解及
·Qt/Embedded在嵌入式Linux中的应
·Linux系统环境下的Socket编程详
·在 Fedora Core 5 上体验 Aiglx
·使用 Linux 系统调用的内核命令
·Linux 2.6.11内核文件IO系统调用
·在Linux中创建静态库和动态库
·嵌入式Linux:uClinux操作系统移
·Linux操作系统下的多进程编程(
·嵌入式系统 Boot Loader 技术内
·Linux操作系统的源代码目录树结
·Linux用户态与内核态的交互讲解
  相关文章
·嵌入式Linux发展 谈Montavista L
·在嵌入式Linux中实现802.11b无线
·Linux内核模块和驱动程序的详细
·主流嵌入式Linux动态扩展技术比
·定制Linux内核 充分发挥系统的潜
·自行打造嵌入式Linux软硬件开发
·Linux 2.6.11内核文件IO系统调用
·在Ubuntu上建立Arm Linux的开发
·Linux“锁骨功” 一张软盘上的嵌
·嵌入式系统优先级反转问题的分析
·嵌入式程序员应知道的几个基本问
·一种解读linux内核源码的入门方

本站信息源至:互联网络,均为学习,交流所用,如有版权问题,请联系我们.
站长QQ:397422079 E_mail:riechelr_hl@unix5.com
转载本站内容请注明原作者名.谢谢!