首页 > 解决方案 > 正确捕获退出代码并在故障点退出脚本

问题描述

我有下面的代码块bashexit每当出现故障但无法这样做时,我都会尝试编写脚本。

#!/bin/bash

jarFilePath=/usr/jars
username=test_user
password=password
host=10.10.10.10

val_query="SELECT * FROM test_db.test_table"

echo "${val_query}"

content=$(java -jar ${jarFilePath} -u ${username},${password} -n ${host} -c "${val_query}") 

if ! $content; then
   echo "Problem in executing query"
   exit 201
fi

touch /home/$username/script_passed.txt

当我传递错误的凭据时,脚本将失败。错误如下

SQLException: [10]: authentication failed

这是预期的,但脚本不会在此错误消息处终止。它正在执行touch命令

我在这里做错了什么以及如何在失败时退出脚本

标签: linuxbashshell

解决方案


大概 java 命令有一个非零退出状态,所以你会这样做:

content=$(java -jar ${jarFilePath} -u ${username},${password} -n ${host} -c "${val_query}") 
rc=$?

if ((rc != 0)); then
   echo "Problem in executing query"
   exit 201
elif [[ -z $content ]]; then
   echo "Empty results"
fi

请注意,该content变量保存命令的输出,而不是退出状态

if ! $content; then ...将内容变量的值作为命令执行,如果该执行具有非零退出状态(来自!),您将获得“真”分支。


推荐阅读