Bash 脚本中的 Postgresql 查询

Bash 脚本中的 Postgresql 查询

我们在使用 postgresql bash 查询时遇到了问题。bash 脚本的查询输出在日期周围添加了额外的引号。你能帮我修复它吗?!

脚本:

#!/bin/sh

lastmonth=$(date -d "-1 month -$(($(date +%d)-1)) days" +%Y-%m-%d)
thismonth=$(date -d '-1 month -12 days' +%Y-%m-%d)

sudo -u postgres psql -d linetest_uptime -A -o /tmp/linetest_$(date +%Y-%m-%d).txt -c "select t.*, ip,port from line_test t,service_address s where '$thismonth' <= start and start < '$lastmonth' and service_address_id=s.id order by t.start,status desc" >/dev/null 2>&1 && sudo mv /tmp/linetest_$(date +%Y-%m-%d).txt /reporting/line_test_data/ && sudo chown $USER:$USER /reporting/line_test_data/linetest_$(date +%Y-%m-%d).txt

输出为:

sudo -u postgres psql -d linetest_watchdog -A -o /tmp/linetest_2014-03-13.txt -c 'select t.*, ip,port from line_test t,service_address s where '\''2014-02-01'\'' <= start and start < '\''2014-02-01'\'' and service_address_id=s.id order by t.start,status desc

我们需要删除现在包裹在日期变量周围的‘\’‘\’。

答案1

这看起来不像是命令的输出——而是一些调试输出吗?

您得到的结果看起来是正确的,因为它可以输入到 shell 中并给出您要求的结果。请注意,它'aaa'\''bbb'与 相同"aaa'bbb"

旁注:您的变量看起来有点过于复杂,您重复$(date +%Y-%m-%d);以下内容可能会有所帮助:

lastmonth=$(date -d "-1 month" +%Y-%m-01)
thismonth=$(date +%Y-%m-01)
today=$(date +%Y-%m-%d)

并且 SQL 查询可能更符合习惯... where date between '$lastmonth' and '$thismonth' ...

相关内容