【发布时间】:2016-12-22 15:19:31
【问题描述】:
我有以下 bash 脚本:
#!/bin/sh
psql -U postgres -c "CREATE DATABASE test TEMPLATE template0;"
if [ $? -eq 0 ]; then
echo OK
else
if [ $? = 'ERROR: database "test" already exists' ]; then
echo OK
else
echo FAIL
fi
fi
当前失败并出现以下错误:
testbox:/tmp# sh test.sh
ERROR: database "test" already exists
FAIL
我不确定我哪里出错了。对于这个特定的错误,我需要它返回“OK”。任何其他错误都应打印出 FAIL。 你能告诉我哪里出错了吗?
谢谢。
编辑 1
我已经修改了代码来捕获输出,而不仅仅是rc:
#!/bin/bash
output=$(psql -U postgres -c "CREATE DATABASE test TEMPLATE template0;")
ret=$?
if [[ $ret -eq 0 ]]; then
echo OK
else
if [[ $output == 'ERROR: database "test" already exists' ]]; then
echo OK
else
echo FAIL
fi
fi
但我得到这个错误:
ERROR: database "test" already exists
sh: ERROR: database "test" already exists: unknown operand
FAIL
【问题讨论】:
-
$?仅代表整数退出代码,而不是您的psql命令的输出。您需要获取输出并检查。 -
@anubhava 好的。可以举个例子吗?
-
@Happydevdays:尝试在
psql命令之后立即添加echo $?,您会看到anubhava 的含义(它只会打印一个数字,可能是“1”)。然后添加第二个echo $?,您会看到一个打印“0”,因为第一个echo命令成功,因此以状态码0 退出。
标签: bash