Shell 编程11(IO重定向)
2013-03-06 22:02
295 查看
I/O重定向是一个过程,这个过程捕捉一个文件、或命令、或程序、或脚本、甚至代码块(code block)的输出,然后把捕捉到的输出,作为输入发送给另外一个文件、或命令、或程序、或脚本
文件标识符是从0开始到9结束的整数,指明了与进程相关的特定数据流的源
Linux系统启动一个进程(该进程可能用于执行Shell命令)时,将自动为该进程打开三个文件:标准输入、标准输出和标准错误输出,分别由文件标识符0、1、2标识
Shell命令从标准输入读取输入数据,将输出送到标准输出,如果该命令在执行过程中发生错误,则将错误信息输出到标准错误输出
默认情况下,标准输入与键盘输入相关联,标准输出和标准错误输出与显示器相关联
标准输出:
例1
cat和>符号结合成为简易文本编辑器
cat命令后不加任何参数时,cat命令的输入是标准输入,即键盘输入
利用I/O重定向符号“>”将键盘输入写入文件
cat > newfile后,就可输入需要写到newfile的内容,最后按CTRL+D结束对newfile的编辑
例2
>>符号用于在已有文件后追加一些文本
eg
ls >>newfile 只是追加并没有把原来的覆盖掉
ls >newfile 将文件清空,然后将内容写进去
例3
>|符号是强制覆盖文件的符号,它与Shell的noclobber选项有关系,如果noclobber选项开启,表示不允许覆盖任何文件,而>|符号则可以不管noclobber选项的作用,强制将文件覆盖
eg
ming@ming-F83VF:~/shellpractice/chapter10$set -C noclobber选项开启
ming@ming-F83VF:~/shellpractice/chapter10$date >newfile
bash: newfile: 无法覆盖已存在的文件
ming@ming-F83VF:~/shellpractice/chapter10$date >|newfile
ming@ming-F83VF:~/shellpractice/chapter10$cat newfile
2012年 11月 10日 星期日 09:47:25 CST
标准错误输出:
1
重定向标准错误输出,需要使用文件标识符2
2> newfile
eg
ming@ming-F83VF:~/shellpractice/chapter10$ ls 22*>newfile
此时是将标准输出到newfile中
但是屏幕中还是会输出,因为他是标准输出
ls: 无法访问22*: 没有那个文件或目录
ming@ming-F83VF:~/shellpractice/chapter10$ls 22* 2>newfile
此时是将标准错误输出到newfile中所以屏幕中没有任何输出
ming@ming-F83VF:~/shellpractice/chapter10$cat newfile
ls: 无法访问22*: 没有那个文件或目录
2
< 是I/O重定向的输入符号,它可将文件内容写到标准输入之中
ming@ming-F83VF:~/shellpractice/chapter10$ wc -l <newfile
1
这个newfile作为标准输入到wc 所以wc得到的内容只是newfile的内容!!
所以他不会知道这是哪个文件!所以只是打印出了文件行数
ming@ming-F83VF:~/shellpractice/chapter10$wc -l newfile
1 newfile
这个newfile作为wc命令的 操作文件。此时wc知道他要计数的是哪个文件,所以能打印出newfile文件名,因此既打印出了行数也打印出了文件名
<<delimiter 这个比较重要!!!
符号称为此处文档(Here-document),delimiter称为分界符,该符号表明:Shell将分界符delimiter之后直至下一个delimiter之前的所有内容作为输入
ming@ming-F83VF:~/shellpractice/chapter10$cat >newfile <<CLOUD
> hello cloud
> hadoop
> nosql
> CLOUD
(
剖析:cat>newfile 是将标准输入到newfile文件中,即键盘输入
newfile<<CLOUD是将输入到CLOUD之前的内容作为标准输入
在此之前是用ctrl+d
结束标准输入,而使用<<
则是吧CLOUD作为结束标准输入
)
ming@ming-F83VF:~/shellpractice/chapter10$cat newfile
hello cloud
hadoop
nosql
文件标识符是从0开始到9结束的整数,指明了与进程相关的特定数据流的源
Linux系统启动一个进程(该进程可能用于执行Shell命令)时,将自动为该进程打开三个文件:标准输入、标准输出和标准错误输出,分别由文件标识符0、1、2标识
Shell命令从标准输入读取输入数据,将输出送到标准输出,如果该命令在执行过程中发生错误,则将错误信息输出到标准错误输出
默认情况下,标准输入与键盘输入相关联,标准输出和标准错误输出与显示器相关联
标准输出:
例1
cat和>符号结合成为简易文本编辑器
cat命令后不加任何参数时,cat命令的输入是标准输入,即键盘输入
利用I/O重定向符号“>”将键盘输入写入文件
cat > newfile后,就可输入需要写到newfile的内容,最后按CTRL+D结束对newfile的编辑
例2
>>符号用于在已有文件后追加一些文本
eg
ls >>newfile 只是追加并没有把原来的覆盖掉
ls >newfile 将文件清空,然后将内容写进去
例3
>|符号是强制覆盖文件的符号,它与Shell的noclobber选项有关系,如果noclobber选项开启,表示不允许覆盖任何文件,而>|符号则可以不管noclobber选项的作用,强制将文件覆盖
eg
ming@ming-F83VF:~/shellpractice/chapter10$set -C noclobber选项开启
ming@ming-F83VF:~/shellpractice/chapter10$date >newfile
bash: newfile: 无法覆盖已存在的文件
ming@ming-F83VF:~/shellpractice/chapter10$date >|newfile
ming@ming-F83VF:~/shellpractice/chapter10$cat newfile
2012年 11月 10日 星期日 09:47:25 CST
标准错误输出:
1
重定向标准错误输出,需要使用文件标识符2
2> newfile
eg
ming@ming-F83VF:~/shellpractice/chapter10$ ls 22*>newfile
此时是将标准输出到newfile中
但是屏幕中还是会输出,因为他是标准输出
ls: 无法访问22*: 没有那个文件或目录
ming@ming-F83VF:~/shellpractice/chapter10$ls 22* 2>newfile
此时是将标准错误输出到newfile中所以屏幕中没有任何输出
ming@ming-F83VF:~/shellpractice/chapter10$cat newfile
ls: 无法访问22*: 没有那个文件或目录
2
< 是I/O重定向的输入符号,它可将文件内容写到标准输入之中
ming@ming-F83VF:~/shellpractice/chapter10$ wc -l <newfile
1
这个newfile作为标准输入到wc 所以wc得到的内容只是newfile的内容!!
所以他不会知道这是哪个文件!所以只是打印出了文件行数
ming@ming-F83VF:~/shellpractice/chapter10$wc -l newfile
1 newfile
这个newfile作为wc命令的 操作文件。此时wc知道他要计数的是哪个文件,所以能打印出newfile文件名,因此既打印出了行数也打印出了文件名
<<delimiter 这个比较重要!!!
符号称为此处文档(Here-document),delimiter称为分界符,该符号表明:Shell将分界符delimiter之后直至下一个delimiter之前的所有内容作为输入
ming@ming-F83VF:~/shellpractice/chapter10$cat >newfile <<CLOUD
> hello cloud
> hadoop
> nosql
> CLOUD
(
剖析:cat>newfile 是将标准输入到newfile文件中,即键盘输入
newfile<<CLOUD是将输入到CLOUD之前的内容作为标准输入
在此之前是用ctrl+d
结束标准输入,而使用<<
则是吧CLOUD作为结束标准输入
)
ming@ming-F83VF:~/shellpractice/chapter10$cat newfile
hello cloud
hadoop
nosql
相关文章推荐
- Shell脚本编程之Bash特性-IO重定向-变量
- Linu Shell 编程基础--基本IO重定向和管道
- Shell脚本编程(一):输出重定向
- Shell输入输出重定向~11
- 【Linux 系统编程】shell 输入/输出重定向
- linux Bash Shell IO重定向与管道
- shell脚本学习11——输入输出重定向
- shell 编程 重定向 read
- UNIX环境C语言编程(11)-高级IO
- linux基础篇-11,IO重定向和管道
- shell之awk的编程结构--BEGIN/END/重定向/管道
- UC编程:输入输出重定向(标准IO)
- Linux命令行与shell脚本(11)--输入/输出重定向
- centos shell编程5 LANMP一键安装脚本 lamp sed lnmp 变量和字符串比较不能用-eq cat > /usr/local/apache2/htdocs/index.php <<EOF重定向 shell的变量和函数命名不能有横杠 平台可以用arch命令,获取是i686还是x86_64 curl 下载 第三十九节课
- Shell教程(11)— 输入/输出重定向
- 高级shell脚本编程之重定向、环境变量、shell函数、echo命令用法
- 【Linux 系统编程】shell 输入/输出重定向(四)
- shell脚本编程-重定向
- SHELL——通配符,IO重定向,正则表达式
- Linux编程Shell基础输出重定向