命令概述
exit命令用于退出当前的shell会话或脚本执行。该命令会终止当前shell进程,并返回一个退出状态码给父进程。
语法格式
exit [状态码]
参数说明
- 状态码:可选参数,指定退出时的状态码,范围是0-255
- 0表示成功退出
- 非0表示异常退出
- 如果不指定状态码,默认使用上一条命令的退出状态
使用示例
1. 退出当前shell
exit
直接退出当前终端会话
2. 指定退出状态码
exit 0 # 成功退出
exit 1 # 异常退出
exit 255 # 最大状态码
3. 在脚本中使用
#!/bin/bash
# 检查文件是否存在
if [ ! -f "config.txt" ]; then
echo "配置文件不存在"
exit 1
fi
# 正常执行
echo "开始处理..."
exit 0
4. 结合条件判断
# 检查命令执行结果
grep "error" logfile.txt
if [ $? -ne 0 ]; then
echo "未找到错误信息"
exit 0
else
echo "发现错误"
exit 1
fi
退出状态码含义
| 状态码 | 含义 | 说明 |
|---|---|---|
| 0 | 成功 | 命令执行成功 |
| 1 | 一般错误 | 通用错误代码 |
| 2 | 误用shell命令 | 命令使用错误 |
| 126 | 命令不可执行 | 权限不足或文件不存在 |
| 127 | 命令未找到 | 命令不存在 |
| 128 | 无效退出参数 | 退出状态码超出范围 |
| 130 | 被Ctrl+C终止 | 用户中断 |
| 255 | 状态码越界 | 超出0-255范围 |
实际应用场景
1. 脚本参数检查
#!/bin/bash
# 检查参数个数
if [ $# -lt 2 ]; then
echo "用法: $0 <源文件> <目标文件>"
exit 1
fi
# 检查源文件是否存在
if [ ! -f "$1" ]; then
echo "错误: 源文件 $1 不存在"
exit 1
fi
# 正常处理
cp "$1" "$2"
exit 0
2. 服务启动检查
#!/bin/bash
# 检查服务是否已启动
if systemctl is-active nginx >/dev/null 2>&1; then
echo "Nginx服务已启动"
exit 0
else
echo "Nginx服务未启动"
exit 1
fi
3. 获取上一条命令的退出状态
ls /nonexistent
echo "退出状态: $?"
# 输出: 退出状态: 2
注意事项
- 在终端中执行
exit会关闭当前会话 - 在脚本中使用
exit会终止脚本执行 - 状态码0表示成功,非0表示失败
- 状态码范围是0-255,超出范围会取模
- 可以使用
$?获取上一条命令的退出状态
相关命令
return:在函数中返回退出状态trap:捕获信号并执行命令kill:终止进程logout:退出登录会话