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

news2024/11/24 15:53:00

前言

    编写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在背后做了什么,它们一概不知。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/747985.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Ajax】笔记-POST请求(原生)

POST请求 html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>AJAX POST 请求</title><…

PFD 鉴相器设计

鉴相器一般用两个D触发器&#xff0c;一个与非门和一个延迟单元 假设两个D触发器脉冲信号完全相同&#xff0c;查看D触发器输出端可以看到&#xff0c;在脉冲信号到来之后&#xff0c;D触发器输出端电压随脉冲信号升高&#xff0c;两个DFF输出同时为高时&#xff0c;与非门输出…

国科生活小程序使用须知

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、子账号是什么&#xff1f;二、子账号怎么用&#xff1f;三、怎么创建子账号&#xff1f;四、账单怎么看&#xff1f;使用须知联系开发者 前言 国科生活小程…

代码随想录算法学习心得 44 | 309.最佳买卖股票的时机含冷冻期、714.买卖股票的最佳时机含手续费、最近买卖股票时机总结...

一、最佳买卖股票的时机含冷冻期 链接&#xff1a;力扣 描述&#xff1a;给定一个整数数组prices&#xff0c;其中第 prices[i] 表示第 i 天的股票价格 。​ 设计一个算法计算出最大利润。在满足以下约束条件下&#xff0c;你可以尽可能地完成更多的交易&#xff08;多次买…

【Java】一篇文章彻底吃透抽象类和接口 |超详细,建议收藏

博主简介&#xff1a;努力学习的预备程序媛一枚~博主主页&#xff1a; 是瑶瑶子啦所属专栏: Java岛冒险记【从小白到大佬之路】 文章目录 一、抽象类1.1&#xff1a;抽象类的概念1.2&#xff1a;抽象类的定义1.3&#xff1a;抽象类的特性1.4&#xff1a;抽象类的作用和意义 二、…

捕获FormData实现极简的上传图片到服务器-实战

1.postman设置请求和查看响应结果 说明&#xff1a;上图中通过传入参数名为avatar,参数值为file格式&#xff0c;请求方式为post,采用form-data格式传入服务器。响应结果。 2.html5网页实现 <input type"file" class"upload_inp" /><button cla…

java堆溢出和栈溢出

一、堆溢出 import java.util.ArrayList; import java.util.List;public class Demo_071202 {public static void main(String[] args) {List<Test> listnew ArrayList<>();while (true){list.add(new Test());}}static class Test{} }设置JVM初始堆空间和最大堆…

告别传统MQ:Kafka是一个分布式事件流平台,这到底意味着什么呢?

1、引言 在大数据时代&#xff0c;实时数据处理和流式数据分析变得越来越重要。为了应对大规模数据的高吞吐量和低延迟处理需求&#xff0c;出现了各种分布式流处理平台。其中&#xff0c;Apache Kafka作为一种高性能、可扩展的分布式消息系统&#xff0c;成为了广泛应用于实时…

并发编程 - EDA 实操

文章目录 需求CodeUser定义不同类型的EventChat Channel(Handler)Chat User线程小结需求 借助我们开发的EDA小框架,模拟一个简单的聊天应用程序。 Code User 我们定义一个User对象,代表聊天室的参与者 package com.artisan

【每日一题】931 . 最小下降路径总和

【每日一题】931 . 最小下降路径总和 931 . 最小下降路径总和题目描述解题思路 931 . 最小下降路径总和 题目描述 给你一个n x n方形队列&#xff0c; matrix请你找出并返回matrix下降路径 的最小和。 下降路径可以从第一行中的任意元素开始&#xff0c;并从每一行中选择一个…

函数基础

一、初识函数 函数&#xff0c;可以当做是一大堆功能代码的集合。 def 函数名():函数内编写代码......函数名()例如&#xff1a; # 定义名字叫info的函数 def info():print("第一行")print("第二行")print("第n行...")info()运用函数的场景&a…

uniApp之同步资源失败,未得到同步资源的授权,请停止运行后重新运行,并注意手机上的授权提示、adb、shell、package、uninstall

文章目录 背景解决思路执行查找第三方应用的指令执行卸载指令 背景 一开始正常编译运行&#xff0c;由于应用页面有些许奇怪的错误&#xff0c;便想着卸载&#xff0c;重新运行安装调试基座。卸载后&#xff0c;运行还是会出现&#xff0c;明明已经把应用卸载了&#xff0c;还是…

C++在线五子棋对战(网页版)项目:实用工具类模块代码实现

在线五子棋项目中需要用到的实用工具模块&#xff1a; 1.日志宏&#xff1a;实现程序日志打印 2.mysql_util:数据库的连接和初始化&#xff0c;句柄的消耗&#xff0c;语句的执行 3.json_util&#xff1a;封装实现json的序列化和反序列化 4.string_util&#xff1a;封装实现字符…

Clion开发STM32之W5500系列(四)

W5500协议层之DHCP功能 头文件 #ifndef STM32_VET6_W5500_DHCP_H #define STM32_VET6_W5500_DHCP_H#include "socket.h"#define DEVICE_ID "w5500" #define IP_CONFLICT_STR "CHECK_IP_CONFLICT" #define DHCP_FLAGSBROADCAST 0x8000 /* …

π141E30S 200Mbps四通道数字隔离器兼容代替NSi8141S0

π141E30S荣湃深力科 200Mbps四通道数字隔离器兼容代替NSi8141S0 π141E30S数字隔离器具有出色的性能特 征和可靠性&#xff0c;整体性能优于光耦和基于其他原理的数字隔离器。 在不需要调制和解调的情况下&#xff0c;实现电压信号跨越隔离介质精 准传输。 π141E30S传输通道…

利用ffmpeg使用脚本+excel批量合成视频

起因是忘了是什么时候&#xff0c;下载的视频是被切割的一个一个的&#xff0c;所以网上找了方法&#xff0c;利用ffmpeg批量进行了批量合成&#xff0c;这里记录一下&#xff0c;并用gpt解释一下脚本含义。 1、文件名批量转mp4格式 如果文件名不规范&#xff0c;可以利用exce…

spark Structured Streaming checkpoint参数优化

目录 1 问题描述2 分析 checkpointLocation 配置 2.1 checkpointLocation 在源码调用链2.2 MetadataLog&#xff08;元数据日志接口&#xff09;3 分析 checkpointLocation 目录内容 3.1 offsets 目录3.2 commitLog 目录3.3 metadata 目录3.4 sources 目录3.5 sinks 目录4 解决…

跨站脚本攻击XSS

​​​​​​1、漏洞原理及防御 XSS又叫CSS (CrossSiteScript),因为与层叠样式表(css)重名,所以叫Xss&#xff0c;中文名叫跨站脚本攻击。 xss攻击&#xff0c;主要就是攻击者通过“html注入”篡改了网页&#xff0c;插入了恶意的脚本&#xff0c;从而在用户浏览网页时&#…

迅为龙芯3A5000_7A2000COMe_模块和主板

龙芯 3A50007A2000 COME 采用全国产龙芯 3A5000 处理器&#xff0c;基于龙芯自主指令系统 (LoongArche)的 LA464 微结构&#xff0c;并进一步提升频率&#xff0c;降低功耗&#xff0c;优化性能。桥片采用龙芯 7A2000&#xff0c;支持 PCIE 3.0、USB 3.0 和 SATA 3.0、显示接口…

单独编译 Android 固件-打包 update.img-iTOP-RK3588开发板

进入到 3588-android12 文件夹&#xff0c;输入以下命令设置 java 版本为 1.8 版本&#xff0c;如下图所示: source javaenv.sh java -version 输入以下命令使能编译环境: source build/envsetup.sh lunch rk3588_s-userdebug 执行完上述命令&#xff0c;如果需要编译 uboo…