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,如需转载请自行联系原作者
相关文章
|
10天前
|
存储 运维 Shell
shell中for while until 三种循环的用法
shell编程中,有几种常见的循环结构,包括for循环、while循环和until循环,总的来说,循环shell编程中扮演着至关重要的角色,它们使得自动化任务变得更加容易,提高了效率,并且可以处理各种各样的编程需求。
shell中for while until 三种循环的用法
|
11天前
|
Web App开发 Java Linux
Linux之Shell基本命令篇
Linux之Shell基本命令篇
Linux之Shell基本命令篇
|
28天前
|
监控 Shell Linux
【Shell 命令集合 系统管理 】Linux 显示当前登录到系统的用户信息 who命令 使用指南
【Shell 命令集合 系统管理 】Linux 显示当前登录到系统的用户信息 who命令 使用指南
43 1
|
12天前
|
Shell Linux
【Linux】12. 模拟实现shell
【Linux】12. 模拟实现shell
27 2
|
24天前
|
Shell C语言 C++
【Shell 编程指南】shell中的(),{}几种语法用法
【Shell 编程指南】shell中的(),{}几种语法用法
17 0
|
25天前
|
存储 算法 Shell
【Linux 环境变量相关】深入理解Linux下 CMake、Shell 与环境变量的交互(二)
【Linux 环境变量相关】深入理解Linux下 CMake、Shell 与环境变量的交互
44 0
|
25天前
|
Shell Linux 开发工具
shell的介绍以及Linux权限的讲解
shell的介绍以及Linux权限的讲解
31 2
|
28天前
|
网络协议 Shell Linux
【Shell 命令集合 系统管理 】Linux 查询域名的注册信息 whois命令 使用指南
【Shell 命令集合 系统管理 】Linux 查询域名的注册信息 whois命令 使用指南
46 1
|
2月前
|
Ubuntu Linux Shell
【Linux操作系统】探秘Linux奥秘:shell 编程的解密与实战
【Linux操作系统】探秘Linux奥秘:shell 编程的解密与实战
57 0
|
3月前
|
Shell Linux C++
Linux C/C++ 开发(学习笔记二):Shell脚本编程案例
Linux C/C++ 开发(学习笔记二):Shell脚本编程案例
38 0