shell常用重定向方法举例

发布时间:2020-08-06编辑:脚本学堂
本文介绍了shell常用重定向的用法,I/O(输入/输出)常用的重定向命令,有关linux文件描述符的实例,需要的朋友参考下。

shell常用重定向方法
每个打开的文件都会被分配一个文件描述符.stdin (键盘), stdout (屏幕), 和 stderr (错误消息输出到屏幕上)的文件描述符分别是0, 1, 和 2.
对于正在打开的额外文件, 保留了描述符3到9.
文件描述符是文件系统为了跟踪这个打开的文件而分配给它的一个数字。

1,>的用法
 

复制代码 代码示例:
[root@jbxue ~]$ echo "11111" > 1.txt
[root@jbxue ~]$ cat 1.txt
11111
[root@jbxue ~]$ echo "11111" 1> 1.txt    //这个用法和上面的用法是一样
[root@jbxue ~]$ cat 1.txt
11111
[root@jbxue ~]$ echo "22222" >1.txt
[root@jbxue ~]$ cat 1.txt
22222
 

因为这是经常会用到的。echo "11111" > 1.txt 时,>前面是有一个1的,是默认的。>重定向到文件时,会将文件清空,在写入。
 

复制代码 代码示例:
[root@jbxue ~]$ > 1.txt 
[root@jbxue ~]$ :> 1.txt 

可以把1.txt文件中的内容清空,其实也很好理解,清空后,不输入内容当然为空了。

2,>>的用法
 

复制代码 代码示例:
[root@jbxue ~]$ echo "2222" >> 2.txt
[root@jbxue ~]$ cat 2.txt
2222
[root@jbxue ~]$ echo "2222" >> 2.txt
[root@jbxue ~]$ cat 2.txt
2222
2222
 

可以看出,>>重定向到文件时,会将输出写到文件的结尾。这一点和>完全不同的。

3,0,1,2 到9,以及&
 

复制代码 代码示例:
[root@jbxue ~]$ cat 1.txt
 333
 111
 222
 444
 [root@jbxue ~]$ grep "22" 0< 1.txt  //把1.txt中的内容读取出来
 222
 [root@jbxue ~]$ ls tank 2>> 1.txt   //将错误信息放到文件的结尾
 [root@jbxue ~]$ cat 1.txt
 333
 111
 222
 444
 

 ls: tank: 没有那个文件或目录   //这个就是 2>> 1.txt产生的内容
 

复制代码 代码示例:
 [root@jbxue ~]$ (ls tank ;pwd) &>1.txt   //将错误信息,以及输出内容放到1.txt文件中,&(stderr,stdout)
 [root@jbxue ~]$ cat 1.txt
 

 ls: tank: 没有那个文件或目录
 /home/zhangy
i>&j重定向文件描述符i 到 j.指向i文件的所有输出都发送到j中去. i和j呢是0-9这间的数字(www.jb200.com 脚本学堂)
 

复制代码 代码示例:
[root@jbxue ~]$ ls tank 2>&1|egrep * 1> 2.txt  //在这里我把错误信息重定向到了1,在这里1就会输出错误,根赋值差不多
[root@jbxue ~]$ cat 2.txt
 

ls: tank: 没有那个文件或目录

4,<>的用法
<这个符号是读取,>这个符号是输出,放在一起就打开并且读取,
 

复制代码 代码示例:
[root@jbxue ~]$ echo 123546 > 2.txt
[root@jbxue ~]$ exec 4<> 2.txt     //打开2.txt并将内容读取到&4中
[root@jbxue ~]$ read -n 4 <&4      //从&4中读取4个字符
[root@jbxue ~]$ echo -n . >&4      //在向&4写入一个点
[root@jbxue ~]$ exec 4>&-          //关闭输出文件描述符4
[root@jbxue ~]$ cat 2.txt
1235.6
 

可以很清楚了解<>的作用。

5,n<&-关闭输入文件描述符n         n>&关闭输出文件描述符n
 

复制代码 代码示例:
[root@jbxue ~]$ ls tank          //会提示错误
ls: tank: 没有那个文件或目录
[root@jbxue ~]$ ls tank 2>&-     //我把错误关闭后,什么也不输出了

6,|管理命令
这个命令也是常用的,是典型的,把一个命令的输出,当作另一个命令的输入
 

复制代码 代码示例:
[root@jbxue ~]$ echo tank | wc -w
 1

表示tank是一个输出,但它又是wc的输入,不然就不会有统计出现了。