Y_csgoto 2019-10-29 12:20 采纳率: 57.1%
浏览 279
已采纳

脚本文件为何总是在where循环指定位置报错?

小弟最近初学shell文件。在CentOS6中写了一个脚本文件对程序进行操作

大概用途就是是向mysql数据库中增加数据

向其中储存用户信息的表中增加用户数据,用户由登录名和密码组成
登录名我准备从100开始,然后每一个用户增加1,而密码我准备都是123456

所以我在sql的插入操作中使用了where循环,但是每次一运行脚本,都会报错:./all.sh: line 4: 2000]: No such file or directory

shell文件具体内容如下:

#!/bin/bash
PassWord=123456
number=100
while [${number} < 2000]
do
/usr/bin/expect <<-EOF
spawn mysql -u root -p
expect "*password*"
send "$PassWord\r"
expect "*>*"
send "show databases;\r"
expect "*>*"
send "use testserver;\r"
expect "*>*"
send "show tables;\r"
expect "*>*"
        send"INSERT INTO testnum values('${number}',123456);\r"
        expect "*>*"
        let "number++"
EOF
done

求各位大佬帮忙解答一下原因

  • 写回答

2条回答 默认 最新

  • 毕小宝 博客专家认证 2019-10-30 06:55
    关注

    研究了一下你这个脚本,除了条件判断语句错误外,还有四处错误:
    第零条,密码定义时应该定义为字符串。
    第一点, send"INSERT INTO 发送插入命令那里 send 语句后面没有空格,导致接收不到插入命令。
    第二点, let "number++" 语句的位置错误,它放在了 expect 的 EOF 内部,实际上还是在 MySQL 的控制台所以报 let 命令无效。22 行的 EOF 外面。
    第三点,因为是每一轮循环都是需要重新登录 MySQL 的,所以需要退出 mysql 命令,最后一个 expect 后面应该加上 send "quit" 退出命令。20 行。
    修改后完整的代码为:

          2 Password='123456'
          4 while [ ${number} -lt 2000 ]
         18 send "INSERT INTO testnum values('${number}',123456);\r"
         19 expect "*>*"
         20 send "quit;\r"
         21 EOF
         22 let "number++"
    

    这是有错误的代码,修正后保证脚本能正确执行。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)
编辑
预览

报告相同问题?

悬赏问题

  • ¥15 失败的github程序安装
  • ¥15 MC9S12XS128单片机开发板实验
  • ¥15 WSL上下载的joern在windows怎么用?
  • ¥15 jetson nano4GB
  • ¥15 电脑回复出厂设置,重装过程报错提示,求解决方案Windows 无法分析或处理无人参与应答文件 [C:\WINDOWS\Panther\unattend.xml,如何解决?
  • ¥15 进入lighttools中的UDOP编辑器的方法
  • ¥15 求Gen6d训练数据集
  • ¥20 liunx中winscp中可以登入ftp,但是不能登入sftp,如何解决
  • ¥15 lighttools的光学属性自定义的用法流程
  • ¥15 uni-app动态修改推荐页标题时报错
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部