2014-05-19 3 views
0

Использования скрипта для вставки данных в базу данных, но получить пустое значение в базеИспользуя скрипт для вставки данных в базу данных

Im пытается сделать массивные и случайным образом вставить значения из него.

#!/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 
+0

В чем проблема? – rpax

ответ

1

Вот простой пример, который воспроизводит проблему:

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

echo "This is blank: $el" 

Это происходит потому, что для цикла и ваше заявление тузд не связаны каким-либо образом. Вы должны получить данные из вашего цикла/конвейера в 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 
0

Включите цикл for, используя нотацию $ (...), чтобы получить свой вывод в el variab ле.

#!/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 
+0

Это хорошее предложение, если вы не изменяете значение 'N' –

Смежные вопросы