打字猴:1.700436151e+09
1700436151
1700436152 shell的另一主要服务是I/O重定向。如果程序被设计为从标准输入(默认为终端)读取,可以通过以下方法改从文件中读取:
1700436153
1700436154 $ program
1700436155
1700436156
1700436157
1700436158
1700436159
1700436160 如果它被设计为写到标准输出(同样,默认为终端),也可以被引导写入输出文件,如下所示:
1700436161
1700436162 $ program >outfile
1700436163
1700436164
1700436165
1700436166
1700436167
1700436168 如果目标文件尚不存在,就会被创建。与上述文件名扩展一样,程序不知道它的输入或输出被重定向。这是一种统一机制,由shell应用,而不是由单独的程序应用,并且比通过文件名参数指定文件输入和输出的方法更容易使用。以下是指定参数的方法示例:
1700436169
1700436170 $ program in=infile out=outfile
1700436171
1700436172
1700436173
1700436174
1700436175
1700436176 shell脚本(shell script)是存储在文件中的一系列命令。用该文件作为输入源,运行shell实例,如同直接输入命令一样运行脚本中的命令:
1700436177
1700436178 $ sh
1700436179
1700436180
1700436181
1700436182
1700436183
1700436184 脚本封装命令序列。例如,对于本书,我写了一系列简单的检查命令,查找拼写和标点符号错误、不正确的格式化命令和其他可能存在的失误。这些检查中的每一项都会运行一个程序。我可以一遍又一遍地重复输入这些命令,也可以把命令序列放在一个叫check的脚本文件中,运行check指令就能做检查。其他的脚本则能输出书页,还能做备份。
1700436185
1700436186 虽然这些脚本是专为我和这本书而编写,但它们实际上是一套新Unix命令。这类个人命令是shell脚本的常见用法,可以快速应用频繁的计算操作。我现在还在用一些三四十年前写的脚本,这在Unix的长期用户中一点也不稀奇。
1700436187
1700436188 使shell程序完全等同于编译后的程序的最后一步:如果文件被标记为可执行文件,它将被传递给shell执行。这样一来,shell脚本就成了“一等公民”,在执行时与编译后的程序没有区别:
1700436189
1700436190 $ check book.txt
1700436191
1700436192
1700436193
1700436194
1700436195
1700436196 shell脚本并不能取代编译后的程序,但它们是程序员工具箱的重要组成部分,既适用于个人,也适用于大型任务。如果你发现自己一遍又一遍地运行着同样的命令序列,那就把它们放到shell脚本中,从而将烦琐工作变得自动化。如果某个shell脚本太慢,可以用其他语言重写。到下一节探讨管道(pipe)技术时,我们将看到shell脚本的更多力量。
1700436197
1700436198
1700436199
1700436200
[ 上一页 ]  [ :1.700436151e+09 ]  [ 下一页 ]