Shell输出、重定向与管道符

2024-08-24 21:04
文章标签 输出 管道 shell 重定向

本文主要是介绍Shell输出、重定向与管道符,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Shell输出、重定向与管道符

      • 1、Shell输出
        • 1.1、标准输入输出
        • 1.2、echo指令
        • 1.3、print与printf指令
      • 2、Shell重定向
      • 3、Shell管道符




由于Shell脚本批处理的特殊性,其大部分操作过程位于后台,不需要用户进行干预,因此,使用重定向和管道进行执行信息的过滤和提取显得尤为重要

1、Shell输出

1.1、标准输入输出

在Shell中,交互式硬件设备标准输入(stdin)和标准输出(stdout)是非常重要的概念

类型设备文件文件描述编号/代码默认设备功能描述
标准输入/dev/stdin0键盘从该设备接收用户输入的数据
标准输出/dev/stdout1显示器通过该设备向用户输出数据
标准错误输出/dev/stderr2显示器通过该设备报告执行出错信息

以下是使用Shell标准输入输出的示例:

# 使用echo命令输出到stdout
echo "Hello, World!"
# 使用管道将前一个命令的stdout作为后一个命令的stdin
echo "Hello, World!" | grep "World"
cat file.txt | grep "World"
1.2、echo指令

echo是Shell中的一个内部指令,用于将指定字符串打印输出到屏幕(标准输出)

echo指令常用选项及说明如下:

选项说明
-n不追加换号输出(默认追加换行输出)
-e启用对特殊字符的转义

以下是一些使用示例:

1)打印字符串文本

echo "Hello, World!"       # Hello, World!

2)打印变量值

name="Alice"
echo "He name is $name"    # He name is Alice

3)打印转义字符

echo "\"Hello, World!\""   # "Hello, World!"

4)打印特殊字符

# 开启转义:\n将被解释为换行,\c将被解释为不换行
echo -e "Hello \n"
echo "World"
# \n输出
Hello World
# \c输出
Hello World

5)打印命令执行结果

echo `date`                # Sat Aug 24 16:28:41 CST 2024
1.3、print与printf指令

printprintf是Shell中的两个标准格式输出指令,其中,printksh(Korn Shell)的内置命令,printfbash(Bourne Again Shell)的内置命令

print只是一个简单的打印命令,每个标准输出后自动换行;printf则是格式化输出指令,printf不会自动在每个标准输出后添加换行符,如果需要换行,需要手动添加\n

printf指令的语法如下:

printf fs args
  • fs:格式字符串(format-string
  • args:参数列表

常用的格式字符串有:

  • %s:字符串,%ns指定输出n个字符(默认右对齐,%-ns表示左对齐)
  • %i:整数,%ni指定输出n个数字(默认右对齐)
  • %c:字符
  • %d:十进制整数
  • %f:浮点数
  • %e:科学计数法表示的浮点数
  • %m.nf:浮点数,共输出m位数,保留n位小数

以下是一个示例:

printf %s\n 1 2 3
printf "%s 体重 %4.2f kg\n" Tom 68.6543
printf "%3s\n" 12 3

输出结果如下:

123
Tom 体重 68.65 kg123

2、Shell重定向


Shell(输出)重定向是指不通过标准输出到显示器上,而是输出到指定的位置(文件)。重定向一般通过在命令间插入特定的操符号来实现

类型操作符功能
重定向输入<从指定文件读取数据,而非键盘输入
重定向输出>将输出结果保存到指定文件(覆盖原有内容)
重定向输出(追加)>>将输出结果换行追加到指定文件尾部
重定向错误输出2>将错误信息保存到指定文件(覆盖原有内容)
重定向错误输出(追加)2>>将错误信息追加到指定文件尾部
混合输出&>将标准输出、标准错误的内容保存到同一个文件中

以下是一个示例:

1)输出到文件

# 如果文件存在,则覆盖内容
echo "Hello, World!" > file.txt

2)追加到文件

# 追加到文件末尾
echo "Hello, World!" >> file.txt

3、Shell管道符


在Shell中,可以使用|连接两个命令,Shell会将前后两个进程的输入输出用一个管道相连,以便达到进程间通信的目的

Shell管道符|将前一个命令的标准输出,作为后一个命令的标准输入

以下是一个示例:

cat file.txt | grep "World"


这篇关于Shell输出、重定向与管道符的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1103598

相关文章

Java实现远程执行Shell指令

《Java实现远程执行Shell指令》文章介绍使用JSch在SpringBoot项目中实现远程Shell操作,涵盖环境配置、依赖引入及工具类编写,详解分号和双与号执行多指令的区别... 目录软硬件环境说明编写执行Shell指令的工具类总结jsch(Java Secure Channel)是SSH2的一个纯J

从基础到高级详解Python数值格式化输出的完全指南

《从基础到高级详解Python数值格式化输出的完全指南》在数据分析、金融计算和科学报告领域,数值格式化是提升可读性和专业性的关键技术,本文将深入解析Python中数值格式化输出的相关方法,感兴趣的小伙... 目录引言:数值格式化的核心价值一、基础格式化方法1.1 三种核心格式化方式对比1.2 基础格式化示例

java -jar example.jar 产生的日志输出到指定文件的方法

《java-jarexample.jar产生的日志输出到指定文件的方法》这篇文章给大家介绍java-jarexample.jar产生的日志输出到指定文件的方法,本文给大家介绍的非常详细,对大家的... 目录怎么让 Java -jar example.jar 产生的日志输出到指定文件一、方法1:使用重定向1、

shell脚本批量导出redis key-value方式

《shell脚本批量导出rediskey-value方式》为避免keys全量扫描导致Redis卡顿,可先通过dump.rdb备份文件在本地恢复,再使用scan命令渐进导出key-value,通过CN... 目录1 背景2 详细步骤2.1 本地docker启动Redis2.2 shell批量导出脚本3 附录总

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

linux下shell脚本启动jar包实现过程

《linux下shell脚本启动jar包实现过程》确保APP_NAME和LOG_FILE位于目录内,首次启动前需手动创建log文件夹,否则报错,此为个人经验,供参考,欢迎支持脚本之家... 目录linux下shell脚本启动jar包样例1样例2总结linux下shell脚本启动jar包样例1#!/bin

在Linux中改变echo输出颜色的实现方法

《在Linux中改变echo输出颜色的实现方法》在Linux系统的命令行环境下,为了使输出信息更加清晰、突出,便于用户快速识别和区分不同类型的信息,常常需要改变echo命令的输出颜色,所以本文给大家介... 目python录在linux中改变echo输出颜色的方法技术背景实现步骤使用ANSI转义码使用tpu

C++20管道运算符的实现示例

《C++20管道运算符的实现示例》本文简要介绍C++20管道运算符的使用与实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录标准库的管道运算符使用自己实现类似的管道运算符我们不打算介绍太多,因为它实际属于c++20最为重要的

shell中set -u、set -x、set -e的使用

《shell中set-u、set-x、set-e的使用》本文主要介绍了shell中set-u、set-x、set-e的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录✅ 1. set -u:防止使用未定义变量 作用: 示例:❌ 报错示例输出:✅ 推荐使用场景:✅ 2. se

Nginx 重写与重定向配置方法

《Nginx重写与重定向配置方法》Nginx重写与重定向区别:重写修改路径(客户端无感知),重定向跳转新URL(客户端感知),try_files检查文件/目录存在性,return301直接返回永久重... 目录一.try_files指令二.return指令三.rewrite指令区分重写与重定向重写: 请求