синтаксическая ошибка: неверный арифметический оператор (токен ошибки " - PullRequest
0 голосов
/ 30 ноября 2018

мой скрипт отказывается работать под cron, но работает нормально при выполнении вручную

#!/bin/bash
LOGFILE=/opt/xxx/scripts/rc.log
fUpMail() {
echo -e "Hello!\n\n$1 xx\n\nBest regards,\n\nCheck LLC 2k18" | mailx -s "$1 Rates were not imported" smone@smth.com 
}
curDate=`date +%Y-%m-%d`
#postgres expression output being assigned to a variable
rateQ=`PGPASSWORD=xxxxxx psql -t -h xxx.xxx.228.134 -p 5433 -d axx2 -U axxx2bo << EOF
SELECT COUNT(id) FROM quote WHERE f_date = '$curDate'
EOF`
#same for demodb
rateDemo=`PGPASSWORD=xxx psql -t -h xx.xxx.42.14 -p 5432 -d axxxo -U acxxxxbo << EOF
SELECT COUNT(id) FROM quote WHERE f_date = '$curDate'
EOF`
#logging
printf "\n`date +%H:%M:%S` $curDate $rateQ $rateDemo\n" >> $LOGFILE

#check if rate value is not null
if [[ $(($rateQ)) != 0 ]] && [[ $(($rateDemo)) != 0 ]];
then
#posting a commentary into jira
curl -u xxx-support-bot:Rzq-xxx-xxx-gch -X POST --data '{"body": "'"$rateQ"' LIVE rates for '"$curDate"' were imported automatically'"\n"''"$rateDemo"' DEMO rates for '"$curDate"' were imported automatically"}' -H "Content-type: application/json" https://jira.in.xxx.com:443/rest/api/2/issue/xxxxxx-1024/comment >> $LOGFILE
else
#if rates were not imported
if [[ $(($rateQ)) == 0 ]];
then
echo "looks like LIVE rates for $curDate were not imported, please check manually!"
#sending a letter
fUpMail 'LIVE'
fi
if [[ $(($rateDemo)) == 0 ]];
then
echo "looks like DEMO rates for $curDate were not imported, please check manually!"
fUpMail 'DEMO'
fi
fi

cron отправляет следующее сообщение:

/opt/xxx/scripts/ratecheck.sh: line 25: Timing is on.
  6543

Time: 4.555 ms: syntax error: invalid arithmetic operator (error token is ".
  6543

Time: 4.555 ms")

строка 25 -

if [[ $(($rateQ)) != 0 ]] && [[ $(($rateDemo)) != 0 ]];

Может кто-нибудь помочь объяснить, что здесь не так?

1 Ответ

0 голосов
/ 01 декабря 2018

Вы получаете больше, чем обычное число от psql, и это мешает преобразованию типов, которое вы делаете.Я думаю, что вы можете удалить дополнительный вывод следующим образом:

rateQ=$(PGPASSWORD=xxxxxx psql -t -h xxx.xxx.228.134 -p 5433 -d axx2 -U axxx2bo -q -c "SELECT COUNT(id) FROM quote WHERE f_date = '$curDate'")

rateDemo=$(PGPASSWORD=xxx psql -t -h xx.xxx.42.14 -p 5432 -d axxxo -U acxxxxbo -q -c "SELECT COUNT(id) FROM quote WHERE f_date = '$curDate'")

Обратите внимание на добавление флага -q:

-q --quiet

Указывает, что psql должен выполнять свою работу спокойно.По умолчанию он печатает приветственные сообщения и различный информационный вывод.Если эта опция используется, ничего из этого не происходит.Это полезно с опцией -c.Это эквивалентно установке переменной QUIET в значение.

https://www.postgresql.org/docs/9.0/app-psql.html

Я также заменил ваши старомодные обратные пометки на $() и поместил запрос SQL в аргумент.

Если это не заставит замолчать дополнительный вывод, вам также может потребоваться отредактировать ~/.psqlrc для пользователя, выполняющего задание cron, и убедиться, что в строке \timing нет.

...