shell脚本里执行多个sql语句问题

我本意是想先手动输入root的的密码,root用户登入后创建用户DDAP和数据库DDAP,
然后mysql -u(手动输入DDAP) -p(手动输入DDAP) 登入,
以下是ddap-mysql.sh脚本内容:
#!/bin/sh
echo "please input root password"
mysql -uroot -p$1 << EOF
\. /usr/src/DDAP-1.CreateUser.SQL
\. /usr/src/DDAP-2.CreateDatabase.SQL
mysql -uDDAP -p$2
\. /usr/src/DDAP-3.CreateTable.SQL
\. /usr/src/DDAP-4.CreateProcedureAndFunction.SQL
\. /usr/src/DDAP-5.CreateData.SQL
EOF

但是只有root用户有输入,mysql -uDDAP -p$2 这一行就输入不了
[root@localhost src]# sh ./ddap-mysql.sh
please input root password
Enter password:
[root@localhost src]#

你没有理解输入重定向的概念。在你上面的代码中,mysql -uDDAP -p$2是包含在输入重定向范围内的,所以不会提示你输入密码的。
你的$1 和$2也没有定义,可以参考如下写法:
#!/bin/sh
read -p "please input root password" pwd
mysql -uroot -p$pwd << EOF
\. /usr/src/DDAP-1.CreateUser.SQL
\. /usr/src/DDAP-2.CreateDatabase.SQL
\. /usr/src/DDAP-3.CreateTable.SQL
\. /usr/src/DDAP-4.CreateProcedureAndFunction.SQL
\. /usr/src/DDAP-5.CreateData.SQL
EOF追问

你的意思我懂 ,你的这个我自己可以实现 ,但是问题是我是想操作两个mysql命令,即下面几个
DDAP-3。。。DDAP-4。。。DDAP-5。。。 这几个sql语句用mysql -uDDAP -p$2 登入 进去,这个用户:DDAP 是在DDAP-1.CreateUser.SQL定义的

追答

这个分开写就好了嘛。。
#!/bin/sh
read -p "please input root password" pwd
mysql -uroot -p$pwd << EOF
\. /usr/src/DDAP-1.CreateUser.SQL
\. /usr/src/DDAP-2.CreateDatabase.SQL
EOF
read -p "please input DDAP password" pwd2
mysql -uDDAP -p$pwd2 <<EOF
\. /usr/src/DDAP-3.CreateTable.SQL
\. /usr/src/DDAP-4.CreateProcedureAndFunction.SQL
\. /usr/src/DDAP-5.CreateData.SQL
EOF

追问

追答

你贴出你写的源码。根据执行结果可以看出你的代码中有特殊字符。

看我附件中的文件:test.sh

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-09-26
$2无定义,输入什么呢?最好用read -p提示输入密码,这样可以保有唯一的密码变量;追问

你帮我补充下,怎么定义怎么输入?帮我修改下 , 谢谢了!

追答

echo "please input root password"改
read -p "please input root password" passwds;
定义了$passwds

追问

mysql -uroot -p$1 << EOF

这一行怎么改?
这里其实没问题
我的意思是 只有mysql -uroot -p有输入,下面的mysql -uDDAP -p$2没有输入信息 直接执行下去了

相似回答