2014-05-19 76 views
0

使用shell腳本,將數據插入到數據庫中,但在基礎使用shell腳本將數據插入到數據庫

即時得到一個空值,試圖使大規模並從中隨機插入值。

#!/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" 

這是因爲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 
0

使用$(...)表示法將您的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 
+0

這是一個很好的建議,只要你不改變'N'的值 –

相關問題