我编写了一个连接数据库的c-shell脚本。这已经很好了,我现在想调用一个sql脚本来读取和打印cetrain表中的所有值。截至目前,这是我的脚本看起来
的方式#!/bin/csh
set MYSQL=${MYSQL_HOME}/mysql
${MYSQL} ${CLEDBUSER}
其中CLEDBUSER被设置为这样的环境变量 - CLEADBUSER = -uusername -ppassword -Ddatabasename
我能够运行脚本并连接到数据库。当我吟唱他的脚本时,它给了我等待下一个命令的msql pront。所以我在脚本中添加了一个包含查询数据库的(SELECT)语句的变量。现在我的脚本看起来像这样
#!/bin/csh
set MYSQL=${MYSQL_HOME}/mysql
set SELECTER="SELECT * FROM TB_EARTH_UI;"
${MYSQL} ${CLEDBUSER} ${SELECTER}
问题是它没有返回我所有的行和columsn但是它返回了我在mysql promt和默认选项以及vairables和boolean选项中的可用命令列表。为什么我的SELECT语句没有被读取?
答案 0 :(得分:1)
MySQL客户端(mysql
)在其标准输入上需要SQL指令(例如,从shell调用时的键盘)。
你可以这样做:[编辑:请忽略,这个是偏离主题的]
${MYSQL} ${CLEDBUSER} < text_file_of_sql_statements.sql
或
${MYSQL} ${CLEDBUSER} << EOF
${SELECTER}
# you can add other litteral SQL statements here, or more variables containing SQL statements
EOF
或
${MYSQL} ${CLEDBUSER} --execute="${SELECTER}"
[编辑]
我完全误解了OP的问题。我没有得到它,他试图从变量执行SQL语句。我已经编辑了上面的选项(谢谢你)。这是另一种变化:
echo ${SELECTER} | ${MYSQL} ${CLEDBUSER}
此外,--skip-column-names
选项可以让您更轻松地解析输出。