shell编程基础(第11篇:重定向)

前言

    编写shell脚本程序时,总会使用重定向技术,用来永久保存程序的输出到文件中,或者用来从文件中提取文本到程序中,都支持哪些重定向呢?

温习3个文件描述符

1、标准输入,标准规定通常是键盘,数字0代表标准输入

2、标准输出,标准规定通常是屏幕,数字1代表标准输出

3、标准错误,标准规定通常是屏幕,数字2代表标准错误

为什么是数字0、1、2,且对应了标准输入、标准输出、标准错误呢?因为这是人为规定好的标准,你遵守它们制定好的标准即可,重定向操作与它们直接相关,现在你只需指导

标准输入重定向

根据标准,标准输入代表键盘,很多命令支持标准输入,比如grep、cat、wc,通常情况下支持从文件中读取内容的程序,往往支持标准输入。

回顾标准输入的使用

使用grep命令演示标准输入的显示,传递给它的参数hello表示正则表达式,接着我使用键盘输入hello world,grep命令会在匹配成功的情况下在标准输出中展示匹配的内容,所以你看到了两行hello world,此时的grep命令会一直处于标准输入的状态下,等待你从键盘输入内容,要想终止需要按下 Ctrl + D,代表标准输入结束,平常我们可以使用这种方式测试为grep传入的正则表达式是否可行,测试起来非常方便,这也算是个小技巧。

1、普通重定向

首先新建一个用于测试的文件,内容只有hello world

 接着我们首次标准输入的重定向,此时的文件内容相当于代表键盘,语法则是使用小于号

 此时输出的hello world则是grep在匹配后向标准输出展示的内容,同时grep程序也会自动结束,你可能想到我们在正常使用标准输入的时候,还需要手动输入Ctrl + D,才能让grep程序结束,而在使用标准输入重定向技术时,这个Ctrl + D,bash会为你自动加上,所以grep直接结束了

2、特殊的内联重定向

 wc命令用于统计文件中的行数、单词数、字符数,此时我传入-l参数,表示只统计行数,它也支持标准输入的重定向,此处使用的特殊的内联重定向

语法规则:一定要有两个小于号开头,后面紧跟着的EOF单词代表开始与结束,当然你可以使用其他任意单词代替,两个EOF单词之间的内容会作为标准输入的内容传递给命令,代表结束的EOF单词,不要在它的旁边加任何空白字符

 当你输入完结束单词后,Ctrl + D也会被自动输入,所以命令也会自动结束

标准输出的重定向

1、覆盖文件的标准输出重定向

使用单个大于号,后面跟着是文件名,文件不存在会创建,存在则会覆盖

echo hello world > test.txt

2、追加文件内容的标准输出重定向

内容会被追加到文件中,文件不存在会创建

echo baby >> test.txt

标准错误的重定向

1、覆盖文件

大于号>前面那个2,代表的就是标准错误,2是标准错误在进程上的文件描述符号

./test.sh 2> error.log

2、追加文件内容

两个大于号,>>,表示追加内容

./test.sh 2>> error.log

同时将标准输出与标准错误重定向到文件中

1、使用&>

./test.sh &> output.log

2、使用2>&1,注意这个要放在后面,2代表标准错误、1代表标准输出

echo hello > fuc.text 2>&1

3、如果是追加内容到文件中,使用>>即可

./test.sh &>> output.log

或者

echo hello >> fuc.txt 2>&1

即向屏幕中输出、也在文件中记录

我们要使用tee命令,它能帮我们办到,感谢chatgpt帮忙,牛13!!!

1. 将标准输出重定向到文件中,并在屏幕上显示输出: ``` ls -l | tee output.txt ```

2. 将标准输出和标准错误输出都重定向到文件中,并在屏幕上显示输出: ``` ls -l 2>&1 | tee output.txt ```

3. 将标准输出重定向到文件中,并在屏幕上显示输出,同时追加输出到另一个文件中: ``` ls -l | tee output.txt | tee -a output2.txt ```

命令其实根本不知道重定向技术,都是bash搞得鬼

echo hello > test.txt

echo命令只是向标准输出中打印hello,它不知道重定向到了某个文件中,这是bash来做的,所有命令都是这样的,命令只认识标准输入、标准输出、标准错误,至于bash在背后做了什么,它们一概不知。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值