Shell脚本基础从头开始(二)── 输出重定向

前言

上节我们学习了linux的一些使用技巧,这节我们一起来学习下linux的输出重定向。作为一个后端开发,经常需要在开发环境部署一些项目,有时候会拿一些别人写好的脚本使用或者是稍微改一改用在自己的项目。那么,你是否对>>>1>2>&>这些命令感到陌生,它们到底是什么作用,今天就带你一问彻底弄懂它们!

输出重定向

> 符号

>的作用是将命令的执行结果输出(覆盖)到指定文件中。
例如我需要统计一下服务器根目录下文件、文件夹的信息,当然你可以使用ls命令的结果复制出来,如果需要更详细的信息,则可以使用ls -l命令(等同于ll)然后把结果复制出来。然而,更好的办法是我们可以把结果输出丛定祥到一个文件中

ls -l > result.txt

这时查看result.txt文件发现刚才ll命令的结果已经被保存到result.txt中。

>> 符号

>>的作用是将命令的执行结果输出(追加)到指定文件中。
咋一看,>>>两个命令的解释没多大差别,那么做个实验你就能清除的区别它们了。分别执行下面命令:

ls -l > result1.txt
ls -l > result1.txt
ls -l > result1.txt

ls -l >> result2.txt
ls -l >> result2.txt
ls -l >> result2.txt

执行完上面 6 条命令,然后分别查看(查看文件内容可以使用cat 文件名命令,后面的内容会讲到)result1result2文件的内容会发现,result1里面只有一份结果,而result2里面有3份结果,因为ls -l >> result2.txt执行了 3 次。二者的区别相信聪明的你已经体会到了。

注意:
> 会将命令执行的结果覆盖式写入文件,多次执行文件内容只有一份。
>> 会将命令执行的结果追加式写入文件,执行几次文件内容就回有几份。

1>、2>、&> 符号

有了对>>>认识的基础,1>、2>、&>相对来说就简单多了。
1>>,系统默认的正确重定向,会把命令执行的正确结果重定向到指定文件。
2>即错误重定向,会把命令执行的正确结果重定向到指定文件。

111 1> result1.txt
111 2> result2.txt

执行上面两条命令后分别查看result1.txtresult2.txt两个文件会发现,result1.txt文件中没有内容,但是result2.txt中会有-bash: 111: 未找到命令的字样。这样你对上面的解释就清除了吧,2>只会把前面命令执行出错时的返回结果重定向到指定文件。而1> 或者是 >则恰恰相反,只会把前面命令执行正确时的返回结果重定向到指定文件。

那么有没有把二者结合起来的功能呢?这就到&>出场了。
为了做实验,下面我书写一段简单的shell脚本:

#!/bin/bash
# test shell

1111

ls l 

脚本只有两句,第一句是无意义的字符,会报错,第二句可以正常输出。那么现在我们执行下这个脚本。当然ll查看信息如下:

-rw-r–r-- 1 root root 46 4月 6 11:03 test.sh
同时文件名是白色的(白色的说明我们没有执行权限,linux中对有执行权限的文件默认是绿色的)

这时我们可以使用chmod a+x test.sh来添加对文件的执行权限,或者是使用bash test.sh命令来直接解析这个脚本(关于权限相关的内容,以后会详细讲解)。
这时,我们使用刚学的&>来接收上一个脚本执行的结果

./test.sh &> result.txt

查看result.txt

cat result.txt

./test.sh:行4: 1111: 未找到命令
总用量 8
-rw-r–r-- 1 root root 38 4月 6 11:17 result.txt
-rwxr-xr-x 1 root root 37 4月 6 11:15 test.sh

我们发现里面既有错误的提示,也有命令正确执行后的结果。
相应的,
1>> 表示将命令的执行(正确执行)结果追加到指定文件中。
2>> 表示将命令的执行出错结果追加到指定文件中。

注意 没有 &>>这个符号! 不信你可以试试。

动动小手实验一波吧
在这里插入图片描述

今天的内容就分享到这里了,我们下节见!

系列传送门如下:
Shell脚本基础从头开始(一)── 几个linux实操技巧
Shell脚本基础从头开始(三)── linux的权限管理
Shell脚本基础从头开始(四)── 第一个shell脚本
Shell脚本基础从头开始(五)── shell的输入输出
Shell脚本基础从头开始(六) ── shell条件测试
Shell脚本基础从头开始(七)── shell的流程控制
Shell脚本基础从头开始(八)── shell的循环语句
Shell脚本基础从头开始(九)── shell的循环语句控制
Shell脚本基础从头开始(十)── shell的文本过滤
Shell脚本基础从头开始(十一)── shell的文本过滤(二)
Shell脚本基础从头开始(十二)── 制作一个字符菜单
Shell脚本基础从头开始(完结篇)── 利用shell编写监控脚本以及shell操作数据库

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不务正业的攻城狮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值