You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bash脚本中捕获isql登录失败并执行退出操作

解决Shell脚本中捕获isql登录失败的问题

你可以通过捕获isql的输出和退出状态,结合错误关键词检测来实现登录失败时退出脚本的需求,以下是修正后的脚本:

# 执行isql命令,合并标准输出与错误输出,过滤掉Password提示行
isql_output=$(isql -S"$envServer" -U"$GCMS_USERNAME" -h -b << ENDSQL 2>&1 | grep -vE "^Password: $"
$GCMS_PASSWORD
set nocount on
GO
USE "mydb"
GO
SELECT tname from MYTABLE
GO
ENDSQL)

# 获取isql命令的退出码
isql_exit_code=$?

# 检查是否存在登录失败的特征信息或命令执行出错
if echo "$isql_output" | grep -q "Login failed\|Msg 4002"; then
    echo "登录失败: $isql_output" >&2
    exit 1
elif [ "$isql_exit_code" -ne 0 ]; then
    echo "isql执行异常,退出码: $isql_exit_code,输出信息: $isql_output" >&2
    exit 1
fi

# 登录成功后执行后续操作
echo "数据库登录成功,开始执行后续任务..."
# 在这里添加你的后续操作代码

关键修改说明:

  • 合并输出流:添加2>&1将stderr合并到stdout,确保登录失败的错误信息被完整捕获。
  • 修正语法错误:原脚本中USE "SELECT tname from MYTABLE"是错误的,USE仅用于切换数据库,执行查询需要用SELECT语句。
  • 双重错误检测:同时检查输出中的登录失败关键词(Login failed、Msg 4002)和isql的退出码,确保不会遗漏异常情况。
  • 标准错误输出:将错误信息输出到stderr(>&2),符合Shell脚本的输出规范,便于后续日志排查。
  • 明确退出逻辑:检测到异常时立即以非0码退出脚本,避免执行后续无效操作。

内容的提问来源于stack exchange,提问作者Aditya Sethi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 06:55:03