Linux Shell之八 转向的用法

简介:

一、文件代码

    “转向”的意思是说:原本应由标准输入(如键盘)读取数据的,改由其它文件读取;原本应把结果显示在标准输出(如屏幕)的,改输出到其它文件。在这个过程中会涉及到文件代码(file descriptor)的概念。

    所谓文件代码,是指操作系统赋予已开启文件一个编号(由0开始),作为追踪文件之用,如对这个文件进行读取或写入的操作,都使用文件代码来沟通。下边文件代码数字用fd来表示。

操作系统默认3个文件代码:0 标准输入、1 标准输出、2 标准错误 

这3个文件在建立Shell环境时已开启,往后如果开启新文件,则分配2以上的号码。

< 代表转向输入,如果< 左边省略文件代码,则默认为0,指的就是标准输入。

> 代表转向输出,如果> 左边省略文件代码,则默认为1,指的就是标准输出。

这些转向语法大部分不能单独使用,必须跟Bash的命令一起运用,如exec、ls、read等,是属于指令结构的一部分

本篇中的fd、n、m代表文件代码

1
2
3
4
#echo ’hello,world!‘ > a.txt
#exec 7<>a.txt
#cat <&7
hello,world!


二、操作文件

这里要说明的"操作文件",是指运用转向的概念,开启文件、复制文件代码和关闭文件。

1、开启文件

语法:fd<>文件

用途:开启文件,指定代码为fd。使用这种方式开启的文件,可供读写。

用例:exec 6<>test.txt

使用exec执行转向,开启文件test.txt,并指定其代码文件为6

2、关闭文件

开启文件后,如果该文件不再使用,最好关闭文件,交回调用文件代码所占用的系统资源。这是一个很好的习惯。

关闭转向输入文件

语法:fd<&-

用例:6<&-

关闭转向输出文件

语法:fd>&-

用例:exec 5>&-

3、复制文件代码,建立文件链接

操作系统已开启的文件代码(0、1、2),为了不影响原有文件代码的作用,最好先复制一份,等操作结束再还原回去,称“复制代码”。

两种方式:

a、复制转向输入的文件代码m,存文件代码n,使n连接至m     n<&m

b、复制转向输出的文件代码m,存成文件代码n,使n连接至m   n>&m

用例:

exec >&6   等同于exec 1>&6,将标准输出连接到文件代码6,因此,凡是出现在标准输出的内容,会转存至文件代码6

cat  <&6   等同于cat  0<&6,将文件代码6的内容,转向至标准输入,而由cat把内容显示出来。

exec 5<&0  复制标准输入(0),存成文件代码5,即建立文件代码0的连接,简单说就是做标准输入的备份。

exec 0<&5  5<&- 将存储在文件代码5的标准输入还原,并关闭文件代码5。


三、转向的用法

代码要紧邻符号,转向输入输出默认只能使用一次。

1、转向输入

语法:fd<文件 

用途:使用"文件"作为输入,指定它的文件代码为fd

用例:

wc -l < /etc/passwd  #<左方省略fd,默认fd为0,指的就是标准输入转向:

exec 6< /etc/passwd  #<左方文件代码不空;

wc -l <&6            #当一次输入回车的时候,会输出passwd行数,再按一次回车则为空             

2、转向输出

语法:fd>文件

用途:使用文件做输出,指定文件代码为fd

如果文件不存在,会建立,如果存在,会清空。可以关闭文件默认操作set -o noclobber或set -C

用例:

>test.txt(创建空文件)      #>左方的省略fd,fd默认为1

:>test.txt                 #效果同上

ls > dirs.txt              #存储命令执行的输出

exec 6> out.txt            #开启文件out.txt作为输出

echo 'hello world!' 1>&6   #将echo输出的内容存储在文件代码6

fd>|文件 同fd>文件 但fd>|不理会noclobber选项,会强制覆盖、清空。

>|不管noclobber选项是否启用,只要文件存在,该内容一定会被清空。

3、转向附加

语法:fd>>文件    

用途:使用方法同 fd>文件, 只是fd>>不会覆盖、不会清空,只是追加。

4、标准错误伴随标准输出做转向

语法:&>文件 或 >&文件 效果一样。

'>文件 2>&1'和 &>作用一样。


本文转自Jacken_yang 51CTO博客,原文链接:http://blog.51cto.com/linuxnote/1641252,如需转载请自行联系原作者
目录
打赏
0
0
0
0
69
分享
相关文章
|
1月前
|
【linux】Shell脚本中basename和dirname的详细用法教程
本文详细介绍了Linux Shell脚本中 `basename`和 `dirname`命令的用法,包括去除路径信息、去除后缀、批量处理文件名和路径等。同时,通过文件备份和日志文件分离的实践应用,展示了这两个命令在实际脚本中的应用场景。希望本文能帮助您更好地理解和应用 `basename`和 `dirname`命令,提高Shell脚本编写的效率和灵活性。
115 32
Linux shell编程学习笔记30:打造彩色的选项菜单
Linux shell编程学习笔记30:打造彩色的选项菜单
Linux 如何更改默认 Shell
Linux 如何更改默认 Shell
167 0
Linux 如何更改默认 Shell
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。通过掌握 ping 命令,读者可以轻松测试网络连通性、诊断网络问题并提升网络管理能力。
405 3
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
这篇文章是关于Linux命令的总结,涵盖了从基础操作到网络配置等多个方面的命令及其使用方法。
137 1
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
5月前
|
Linux的基础用法
Linux的基础用法
41 6
Linux shell编程学习笔记82:w命令——一览无余
Linux shell编程学习笔记82:w命令——一览无余
常用的 55 个 Linux Shell 脚本(包括基础案例、文件操作、实用工具、图形化、sed、gawk)
这篇文章提供了55个常用的Linux Shell脚本实例,涵盖基础案例、文件操作、实用工具、图形化界面及sed、gawk的使用。
1083 2
|
5月前
|
【Linux】shell基础,shell脚本
Shell脚本是Linux系统管理和自动化任务的重要工具,掌握其基础及进阶用法能显著提升工作效率。从简单的命令序列到复杂的逻辑控制和功能封装,Shell脚本展现了强大的灵活性和实用性。不断实践和探索,将使您更加熟练地运用Shell脚本解决各种实际问题
83 0