当前位置: 首页 > news >正文

Shell脚本命令扩展

文章目录

  • 一、标准文件描述符
    • 1. 标准输入(0,stdin)
    • 2. 标准输出(1,stdout)
    • 3. 标准错误(2,stderr)
    • 特殊用法:丢弃输出
  • 二、 命令退出状态码
    • 如何查看退出状态码
  • 总结


一、标准文件描述符

在 Linux/Unix 系统中,文件描述符(File Descriptor) 是一个非负整数,用于标识进程正在操作的文件或 I/O 流。标准文件描述符是系统预定义的 3 个基础描述符,分别对应程序运行时默认打开的 3 种 I/O 流:

文件描述符	名称	缩写	      默认对应设备作用
0	标准输入	stdin	键盘		接收用户输入的数据
1	标准输出	stdout	终端(屏幕)	输出程序的正常结果
2	标准错误	stderr	终端(屏幕)	输出程序的错误信息

1. 标准输入(0,stdin)

程序从标准输入读取数据,默认是键盘输入,可通过 < 符号重定向到文件。

# 从键盘读取输入(默认行为)
read -p "请输入你的名字: " name
echo "你好,$name"# 从文件读取输入(重定向 stdin)
# 假设文件 input.txt 内容为 "Alice"
read name < input.txt
echo "从文件读取到的名字: $name"  # 输出:从文件读取到的名字: Alice

2. 标准输出(1,stdout)

程序输出正常结果,默认显示在屏幕,可通过 > 或 1> 符号重定向到文件。

# 输出到屏幕(默认行为)
echo "这是正常输出"  # 直接显示在屏幕# 重定向到文件(1> 可简写为 >)
echo "保存到文件的内容" 1> output.txt  # 内容写入 output.txt
ls -l > file_list.txt  # 将 ls 命令的结果保存到文件

3. 标准错误(2,stderr)

程序输出错误信息,默认显示在屏幕,需通过 2> 符号单独重定向(与 stdout 区分)。

# 错误信息默认显示在屏幕
ls non_existent_file  # 输出:ls: 无法访问 'non_existent_file': 没有那个文件或目录# 重定向错误信息到文件
ls non_existent_file 2> error.log  # 错误信息写入 error.log,屏幕无输出# 同时重定向 stdout 和 stderr(分别到不同文件)
command > output.log 2> error.log# 同时重定向 stdout 和 stderr 到同一个文件
command > all_output.log 2>&1  # 将 stderr 合并到 stdout,一起写入文件
command > all_output.log 2>&1

这条命令如果command正常执行的话为标准输出1,会正常写入到log文件中,2>&1的作用是将当command输出错误时为2,按理说应该不写入到log中而是直接打印在终端中,但是2>&1可以使2走标准输出的路径通道,所以会和1一起输入到log中,也就是说不管这个命令是正确执行还是报错,都会将执行后的结果或者错误报告写到log中。

特殊用法:丢弃输出

如果需要忽略某个流的输出(如屏蔽错误信息),可重定向到 /dev/null(系统的 “黑洞” 设备):

# 忽略错误信息
rm non_existent_file 2> /dev/null# 忽略所有输出(stdout 和 stderr)
command > /dev/null 2>&1

二、 命令退出状态码

在 Linux/Unix 系统中,命令退出状态码(Exit Status Code) 是命令执行完毕后返回给系统的一个整数,用于表示命令的执行结果(成功、失败或特定状态)。

核心规则

  • 状态码为 0:表示命令执行成功
  • 状态码为 非 0(1~255):表示命令执行失败(不同非 0 值可能对应不同错误原因)

如何查看退出状态码

# 执行一个成功的命令
ls ~
echo $?  # 输出 0(表示成功)# 执行一个失败的命令
ls /不存在的目录
echo $?  # 输出非 0(如 2,表示失败)

注意:当使用 ps 结合 grep 过滤但没有找到匹配数据时(即使正确执行了),grep 命令会返回状态码 1。这是 grep 命令的特性:

# 场景1:查找存在的进程(如 bash)
ps aux | grep "bash"
echo $?  # 输出 0(找到匹配内容)# 场景2:查找不存在的进程(如 non_existent_process)
ps aux | grep "non_existent_process"
echo $?  # 输出 1(未找到匹配内容)# 场景3:grep 发生错误(如无效选项)
ps aux | grep --invalid-option
echo $?  # 输出 2(命令错误)

总结

提示:这里对文章进行总结:

例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

http://www.dtcms.com/a/358396.html

相关文章:

  • 回归问题的损失函数
  • 06.《STP 基础原理与配置详解》
  • 学习python第14天
  • Spark mapGroups 函数详解与多种用法示例
  • 神经网络正则化三重奏:Weight Decay, Dropout, 和LayerNorm
  • 嵌入式硬件电路分析---AD采集电路
  • pyqt5的简单开发可视化界面的例子
  • 【重学 MySQL】九十三、MySQL的字符集的修改与底层原理详解
  • Linux学习----归档和传输文件实用指南
  • java报错问题解析
  • 在 MyBatis 中oracle基本数值类型的 JDBC 类型映射
  • Let‘s Encrypt证书自动续期
  • 【数据分享】上市公司-创新投入、研发投入数据(2007-2022)
  • 【Python 后端框架】总结
  • Transformer:从入门到精通
  • 第二十六天-待机唤醒实验
  • 【GaussDB】在逻辑复制中剔除指定用户的事务
  • Java动态代理
  • Redis-基数统计、位图、位域、流
  • ⚡ Linux find 命令参数详解
  • 【开题答辩全过程】以 云智课为例,包含答辩的问题和答案
  • SQL语言增删改查之C与R
  • 05MySQL多表查询全解析
  • Flutter 跨平台开发环境搭建指南
  • Spring Boot 后端接收多个文件的方法
  • Android 权限申请现代化指南
  • 机器学习中的欠拟合与过拟合
  • SC税务 登录滑块 分析
  • 桌面GIS软件FlatGeobuf转Shapefile代码分享
  • Coze源码分析-API授权-添加新令牌-后端源码