当前位置: 首页 > 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.xdnf.cn/news/1405441.html

相关文章:

  • Langflow核心技术学习笔记(新)
  • 针对 “TCP 数据传输机制” 的攻击
  • STL中的容器,迭代器
  • DAY 18 推断聚类后簇的类型 - 2025.8.30
  • Megatron-LM(模型并行)
  • 2025 年 AI 发展十大预测:多模态融合、边缘 AI 普及将成核心增长点
  • Redis数据类型概览:除了五大基础类型还有哪些?
  • 【适度精简】Windows 7 旗舰版-emmy精简系统
  • SpringAI应用开发工程师高阶面试剧本与知识点全解析(含RAG、多租户、流式推理、企业落地场景)
  • leetcode2(移除元素)
  • windows32位下载谷歌浏览器的地址
  • Twitter舆情裂变链:指纹云手机跨账号协同机制提升互动率200%
  • 大数据在UI前端的应用深化研究:用户行为数据的跨平台关联分析
  • 优化器全指南:从原理到调优实战
  • DrissionPage 实战:高效爬取网页数据并保存为 CSV 的全流程解析
  • 什么是雪花算法
  • Western Blot 样本制备完整流程:从细胞 / 组织到变性样品的关键步骤与细节
  • Selenium自动化测试快速入门指南
  • 玄机靶场 | 第五届红明谷-异常行为溯源
  • MCP进阶指南:如何挑选最适合你的AI助手“装备“
  • [光学原理与应用-332]:ZEMAX - 序列模式与非序列模式的本质、比较
  • JavaScript 中的 this 关键字
  • Python远程文件管理移动端适配与跨平台优化实战
  • 【自记】MaxCompute 中 对于“数据量大、耗时久、非实时”任务的设置建议
  • Linux 下 Docker 容器部署指南(Java + Redis 示例)
  • 2025年水库单北斗GNSS变形监测TOP3系统推荐榜单
  • C++ 之 【map和set的模拟实现】(只涉及map和set的插入、迭代器以及map的operator[]函数)
  • 使用 JavaScript 构建 RAG(检索增强生成)库:原理与实现
  • TechPowerUp GPU-Z中文版:专业显卡检测工具
  • 多教师语言感知知识蒸馏:提升多语种语音情绪识别的新方法