如何在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
相关产品推荐
相关产品推荐

