【问题标题】:Using shell script to insert data into database [duplicate]使用shell脚本将数据插入数据库[重复]
【发布时间】:2014-05-19 16:39:50
【问题描述】:

使用shell脚本将数据插入数据库,但在base中得到一个空白值

我正在尝试从中生成大量随机插入值。

#!/bin/bash
N=1
ARRAY=( adssa asdsa fdgfd vcbxcxv )
for el in "${ARRAY[@]}"
do echo $el
done | shuf | head -$N

mysql -u root -pPass somebase << EOF
INSERT INTO sometable (name) VALUES ('$el');
SELECT * FROM site_user;
EOF

【问题讨论】:

  • 问题出在哪里?

标签: mysql bash shell


【解决方案1】:

这是一个重现您的问题的简单示例:

for el in foo bar
do
  echo "$el"
done | head -n 1

echo "This is blank: $el"

发生这种情况是因为 for 循环和您的 mysql 语句没有以任何方式连接。您必须将数据从循环/管道获取到 mysql。

执行此操作的最简单方法可能是 while read 循环:

for el in foo bar
do
  echo "$el"
done | head -n 1 | while read -r line
   do
      echo "This is not blank: $line"
   done

在您的示例中,这将是:

#!/bin/bash
N=1
ARRAY=( adssa asdsa fdgfd vcbxcxv )
for el in "${ARRAY[@]}"
do echo $el
done | shuf | head -$N | while read -r line
do 
mysql -u root -pPass somebase << EOF
  INSERT INTO sometable (name) VALUES ('$line');
  SELECT * FROM site_user;
EOF
done

更简单的方法是:

#!/bin/bash
n=1
array=( adssa asdsa fdgfd vcbxcxv )
printf "INSERT INTO sometable (name) VALUES ('%s');\n" "${array[@]}" | \
  shuf | head -n $n | mysql -u root -pPass somebase

【讨论】:

    【解决方案2】:

    使用 $(...) 表示法将您的 for 循环括起来,以将您的输出放入 el 变量中。

    #!/bin/bash
    N=1
    ARRAY=( adssa asdsa fdgfd vcbxcxv )
    el=$(for el in "${ARRAY[@]}"
    do echo $el
    done | shuf | head -$N)
    
    mysql -u root -p1550005 stat << EOF
    INSERT INTO site_user (name) VALUES ('$el');
    SELECT * FROM site_user;
    EOF
    

    【讨论】:

    • 这是个好建议,只要不改变N的值即可
    猜你喜欢
    • 2011-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多