我目前正在构建一个bash脚本来停止我们的SAP HANA数据库,然后检查它是否成功地停止了它。这是一个正在进行的工作,也是我写的第一个“更长”的脚本。
出于某种原因它告诉我:
testscript.sh:第19行:[::所期望的整数表达式
为什么会这样?请看我下面的剧本
#### errocodes
#### 0 hanadb state = OK
#### 10 hanadb state = STOPPED
#### 20 hanadb state = WARNING
#### 30 hanadb state = ERROR
# stop HANA DB
sudo /usr/sap/hostctrl/exe/sapcontrol -nr 00 -function Stop
# check hana db state
echo "Checking if Service is active"
HANADBSTATUS=`sudo /usr/sap/hostctrl/exe/sapcontrol -nr 00 -function GetProcessList`
if [ "$HANADBSTATUS" = GRAY ]
then
echo "Hana DB is stopped."
exit 10
else
sleep 5
while [ "$HANADBSTATUS" != GRAY ] && [ "$i" -lt 4 ]
do
echo "Warning: There seems to be a problem with stopping the HANA DB. Will retry 3-Times until Script will abort. This is retry Number: $i"
sudo /usr/sap/hostctrl/exe/sapcontrol -nr 00 -function Stop
sleep 20
HANADBSTATUS=`sudo /usr/sap/hostctrl/exe/sapcontrol -nr 00 -function GetProcessList`
((i++))
if [ "$i" = 3 ]
then
echo "Error: retried 3-Times. Couldn't stop DB. Exiting Script."
echo "Script aborts with Error 0"
exit 0
fi
done
fi发布于 2022-10-20 14:50:55
在set -x之后添加sudo ... (启用调试模式),运行脚本并检查调试输出。
我的猜测是,[ "$i" -lt 4 ]正在生成错误,因为变量i (最初)是未定义的,因此测试变成了[ "" -lt 4 ],生成了您所看到的相同的错误:
$ typeset -p i
-bash: typeset: i: not found
$ if [ "$i" -lt 4 ]; then echo yes;fi
-bash: [: : integer expression expected启用调试模式,以显示使用未定义的i测试的样子
$ set -x
$ if [ "$i" -lt 4 ]; then echo yes;fi
+ '[' '' -lt 4 ']'
-bash: [: : integer expression expected一个快速的解决方法是确保i在while循环之前被初始化,例如:
sleep 5
i=0
while [ "$HANADBSTATUS" != GRAY ] && [ "$i" -lt 4 ]
do
....
donehttps://stackoverflow.com/questions/74141761
复制相似问题