使用bash脚本将mysql表数据导出到csv

时间:2015-12-08 14:43:28

标签: mysql bash

我正在尝试将我的sql表数据导出到csv但是有这些错误。我对双引号和单引号感到困惑。

#!/bin/bash
mysql -u root -pH0tjava1 -B -e 'SELECT CONCAT("sshpass -p ""Password"" rsync -avvtzh -e ""ssh -o StrictHostKeyChecking=no"" --log-file=""/home/toor/rsync2.log""", login,"@", ftp_addr, " :", camera_name,"/", "/",`\ 'home`',"/",login, "/", camera_name) INTO OUTFILE '/tmp/rsynctest3.csv' lines terminated by '\r\n' from inteliviz.cameras;"


Errors:
/usr/local/bin/rsync.sh: line 8: syntax error near unexpected token `)'
/usr/local/bin/rsync.sh: line 8: `  mysql -u root -pH0tjava1 -B -e "select  CONCAT ("sshpass -p "Pa55word"  rsync   -avvtzh -e  "ssh -o StrictHostKeyChecking=no"  --log-file= "/home/toor/rsync2.log", login,camera_name,ftp_addr)  INTO OUTFILE '/tmp/rsynctest3.csv' lines terminated by '\r\n'  from inteliviz.cameras;"'

/usr/local/bin/rsync.sh: line 8: unexpected EOF while looking for matching ``'
/usr/local/bin/rsync.sh: line 11: syntax error: unexpected end of file

2 个答案:

答案 0 :(得分:0)

  

我对双引号和单引号感到困惑。

您的声明中不仅有双引号和单引号,还有反引号。不匹配是:

  • 您使用'SELECT…开始SQL语句,并以…inteliviz.cameras;"结束。要将引号从第一部分中的'切换到最后一部分中的",您必须插入一个结束'和一个开头",例如: G。 …camera_name)'" INTO OUTFILE…
  • 表达式`\ 'home`'混乱 - 第一个`位于外部单引号内,因此没有特殊功能,'home关闭单引号部分之前,第二个`打开一个未关闭的命令替换,其中最终的'是。你必须重新考虑你想拥有的东西并直接嵌套报价。

答案 1 :(得分:0)

尝试以下适用于我的脚本:

# Read query into a variable
sql="$(cat query.sql)"

# If sqlplus is not installed, then exit
if ! command -v sqlplus > /dev/null; then 
  echo "SQL*Plus is required..."
  exit 1 
fi 

# Connect to the database, run the query, then disconnect
echo -e "SET PAGESIZE 0\n SET FEEDBACK OFF\n $sql" | \
sqlplus -S -L "$USERNAME/$PASSWORD@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=$HOST)(PORT=$PORT))(CONNECT_DATA=(SERVICE_NAME=$DATABASE)))"