网站首页 > 基础教程 正文
背景
Bash和sh不像Perl那样提供内置的die命令,但在脚本中使用终止函数是很常见的。你只需自己编写一个即可。大多数编写终止函数的人喜欢保持简单。通常有两种常见的类型:一种只接受要打印的消息,另一种接受消息和退出状态值。
# Usage: die message ...
die() {
printf '%s\n' "$*" >&2
exit 1
}
# Usage: die exit_status message ...
die() {
rc=$1
shift
printf '%s\n' "$*" >&2
exit "$rc"
}
复杂的定制化版本
有些人喜欢更复杂的函数。如果你喜欢更复杂的函数,这里有几个变体:
##
# warn: 向stderr打印消息。
# 用法:warn "格式" ["参数"...]
#
warn() {
local fmt=$1
shift
printf "脚本名称:$fmt\n" "$@" >&2
}
###
### 以下的三个"die"函数
### 依赖于上述的"warn"函数。
###
##
# die(简单版本):向stderr打印消息,并以最近命令的退出状态退出。
# 用法:some_command || die "消息" ["参数"...]
#
die () {
local st=$?
warn "$@"
exit "$st"
}
##
# die(显式状态版本):向stderr打印消息,并以给定的退出状态退出。
# 用法:if blah; then die 状态码 "消息" ["参数"...]; fi
#
die() {
local st=$1
shift
warn "$@"
exit "$st"
}
##
# die(可选状态版本):向stderr打印消息,并以给定的状态或最近命令的退出状态退出。
# 用法:some_command || die [状态码] "消息" ["参数"...]
#
die() {
local st=$?
if [[ $1 != *[^0-9]* ]]; then
st=$1
shift
fi
warn "$@"
exit "$st"
}
##
# warn:向stderr打印消息。
# 用法:warn "消息"
#
warn() {
printf '%s\n' "$@" >&2
}
##
# die(可选状态版本):向stderr打印消息,并以给定的状态或最近命令的退出状态退出。
# 用法:some_command || die "消息" [状态码]
# some_command && die "消息" [状态码]
die() {
local st=$?
case $2 in
*[^0-9]*|'') :;;
*) st=$2;;
esac
warn "$1"
exit "$st"
}
最后
如果你想学习如何编写更加健壮和可靠的 Shell 脚本,减少生产环境中的错误和故障,那么关注我吧!我会分享 Shell 编程的最佳实践和建议,帮助你提高 Shell 脚本的鲁棒性和可维护性。如果你想深入了解 Shell 编程的实际应用和技巧,可以关注我的《Shell 脚本编程最佳实践》专栏,里面有我在一线互联网大厂的实际生产经验和最佳实践,帮助你高效完成各种自动化任务。
猜你喜欢
- 2024-10-12 这个为生信学习打造的开源Bash教程真香!!(目录更新)
- 2024-10-12 Shell 函数(杰哥教你Linux) shell中函数
- 2024-10-12 Linux下程序是怎样执行的 linux怎么执行程序
- 2024-10-12 这几个常用 alias,带你高效做事(下)
- 2024-10-12 Shell脚本:函数语法以及实例讲解 shell脚本入门详解
- 2024-10-12 Linux 之 bash 编程 linux bash-4.1
- 2024-10-12 Bash函数:ucase、lcase:借助perl一键转换字符串为大小或小写
- 2024-10-12 Bash Shell制作菜单3部曲:1简单交互菜单|Linux|运维|嵌入式
- 2024-10-12 Bash脚本中的用户交互:暂停、等待按键和倒计时的实现方法
- 2024-10-12 bash问题:是否有函数可以返回字符串的长度?
- 最近发表
-
- 自动脚本操作流程(自动脚本怎么做)
- Ubuntu系统存在严重漏洞,几句命令轻松攻破root权限
- redis实现分布式锁(redis实现分布式锁的原理)
- Linux系统移植之—uboot移植,你们要的uboot终于来了,堪称精品
- powershell 后台运行命令(如何在powershell运行程序)
- 生产环境H200部署DeepSeek 671B 满血版实战(三):SGLang 安装详解
- OpenWrt 小白常用命令大全(openwrt操作命令)
- Linux-shell脚本多线程实现(shell 多线程并发执行)
- Thread.sleep(0):线程休眠0秒有什么意义?
- 40 个简单又有效的 Linux Shell 脚本示例
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)