echo $?
查看状态码,帮助识别错误类型并修正命令。命令行输入错误命令的返回值和处理方法
在使用命令行工具时,输入错误的命令是常见的操作失误,系统会通过返回值(Exit Code)反馈执行结果,帮助用户快速定位问题,以下从错误类型、返回值含义、处理方法三个方向详细说明。
错误命令的常见类型与返回值
命令行执行错误时,返回值通常是非零整数(0表示成功),不同错误类型对应不同返回值:
-
命令不存在
- 返回值:127(Linux/Unix)或 9009(Windows)
- 示例:输入
hello
(假设不存在该命令)$ hello bash: hello: command not found $ echo $? # 输出返回值 127
-
权限不足
- 返回值:126(Linux/Unix)或 5(Windows)
- 示例:尝试执行无权限的文件
$ ./script.sh bash: ./script.sh: Permission denied $ echo $? 126
-
参数错误
- 返回值:1(通用错误码)
- 示例:
git
命令参数错误$ git --invalid-option error: unknown option `invalid-option' $ echo $? 1
如何获取返回值?
不同操作系统获取返回值的方式略有差异:
Linux/Unix系统
使用 变量获取上一个命令的返回值:
$ invalid_command $ echo $? # 输出127
Windows系统
通过 %ERRORLEVEL%
变量获取:
> invalid_command > echo %ERRORLEVEL% # 输出9009
利用返回值调试与处理错误
返回值是脚本自动化的重要依据,可通过以下方式处理:
条件判断
在脚本中根据返回值执行不同操作:
# Linux示例 mkdir /root/test 2>/dev/null if [ $? -ne 0 ]; then echo "Error: 权限不足或路径无效" fi
逻辑短路(&& 或 ||)
直接关联成功/失败后的动作:
# 仅当命令成功时执行后续操作 git commit -m "message" && git push # 仅当命令失败时执行提示 invalid_command || echo "命令执行失败,请检查输入"
脚本中预设错误处理
通过 trap
捕获异常并统一处理:
trap 'echo "错误代码: $?" > error.log; exit 1' ERR
高级调试技巧
-
启用详细模式
添加set -x
显示执行细节:#!/bin/bash set -x # 开启调试 invalid_command set +x # 关闭调试
-
自定义返回值
在脚本中通过exit
指定返回值:#!/bin/bash if [ ! -f "file.txt" ]; then echo "文件不存在" exit 2 # 自定义错误码 fi
常见问题解答(FAQ)
-
为什么返回值是127或9009?
系统为不同错误类型分配了预定义代码,命令未找到”在类Unix系统中固定为127。 -
如何查看所有错误码含义?
- Linux:通过
man sysexits
查看标准错误码。 - Windows:参考微软官方文档^1。
- Linux:通过
-
返回值与输出内容有何区别?
返回值是数字状态码,用于程序判断;是命令打印到终端的文本信息。
引用说明
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/6529.html