我有一个相当简单的 bash 脚本:
#!/bin/bash -xe
source /reTech/REB3bastionscripts/setup/setenv.sh
echo "##### Begin check/create reportuser #####################################################"
if [ $REPORT_DB_ENDPOINT != none ]; then
user_exists=$(psql -U $REPORT_DB_USER -h $REPORT_DB_ENDPOINT -d $REPORT_DB -c "SELECT rolname FROM pg_roles WHERE rolname='reportuser'" | grep reportuser -c)
if [ "$user_exists" == "1" ]; then
echo Reportuser exists already in $REPORT_DB database. Resetting password and updating permissions...
else
echo creating user reportuser for $REPORT_DB
fi
fi
if [ !$GRAFANA_DB_ENDPOINT != none ]; then
user_exists=$(psql -U $GRAFANA_DB_USER -h $GRAFANA_DB_ENDPOINT -d $GRAFANA_DB -c "SELECT rolname FROM pg_roles WHERE rolname='reportuser'" | grep reportuser -c)
if [ "$user_exists" == "1" ]; then
echo Reportuser exists already in $GRAFANA_DB database. Resetting password and updating permissions...
else
echo creating user reportuser for $GRAFANA_DB
fi
fi
echo "##### End check/create reportuser #####################################################"
无论我对 if 语句尝试哪种排列,它总是在显示局部变量 user_exists 包含的值后停止,但从不执行下一步。 结果是:
##### Begin check/create reportuser #####################################################
+ '[' psql-reb3az-devaz-reportdbserver.postgres.database.azure.com '!=' none ']'
++ grep reportuser -c
++ psql -U rebotics -h psql-reb3az-devaz-reportdbserver.postgres.database.azure.com -d report -c 'SELECT rolname FROM pg_roles WHERE rolname='\''reportuser'\'''
+ user_exists=0
我在此恳请帮助。 谢谢。 沃尔夫冈
bash 命令行上的
-e
告诉 shell 当它执行的任何命令以非零值退出时终止。
当
grep ... -c
与 reportuser
不匹配时,它会以 1 退出,因此 shell 停止运行。请注意,对于管道,仅考虑最后一个命令的状态。
要修复,这里有几个选项:
-e
(在shebang上,#!
,顶部的线)|| true