![mysql -e 选项带变量数据 - 传递变量值以在 shell 脚本中插入 sql 语句](https://linux22.com/image/588375/mysql%20-e%20%E9%80%89%E9%A1%B9%E5%B8%A6%E5%8F%98%E9%87%8F%E6%95%B0%E6%8D%AE%20-%20%E4%BC%A0%E9%80%92%E5%8F%98%E9%87%8F%E5%80%BC%E4%BB%A5%E5%9C%A8%20shell%20%E8%84%9A%E6%9C%AC%E4%B8%AD%E6%8F%92%E5%85%A5%20sql%20%E8%AF%AD%E5%8F%A5.png)
以下 shell 脚本未将数据插入表中。如何将变量值传递给 shell 脚本中的插入 sql 语句。
id=0
while true
do
id=`expr $id + 1`;
mysql -u root -ptest --socket=/data/mysql1/mysql.sock -e 'insert into mytest1.mytable2(id,name) values (' $id ',"testing");'
echo $id >> id.txt
done
我已按如下方式修改脚本并尝试,但问题仍然存在
id=0
while true
do
id=`expr $id + 1`;
# mysql -u root -ptest --socket=/data/mysql1/mysql.sock1 -e 'insert into mytest1.mytable1(name) values ("amma");'
mysql -u root -ptest --socket=/data/mysql1/mysql.sock -e 'insert into mytest1.mytable2(id,name) values ( $id ,"testing");'
echo $id >> id.txt
done
错误 :
]$ ./insert
ERROR 1054 (42S22) at line 1: Unknown column '$id' in 'field list'
答案1
这个应该可以工作:
id=0
while true
do
id=`expr $id + 1`;
mysql -u root -ptest --socket=/data/mysql1/mysql.sock -e "insert into mytest1.mytable2(id,name) values ($id, \"testing\");"
echo $id >> id.txt
done
双引号内的变量会被插入,而单引号之间的变量则不会被插入。