连接 mysql 的方法,它只在 bash 脚本的 for 循环内执行一次?
way to connect mysql which executes only once inside the for loop in bash script?
我有一个脚本将执行插入查询 n 次 - 为此我使用了 FOR 循环,但问题是连接到远程 mysql 的命令也执行了 n 次。这是解决我的问题的更好主意的脚本。
#!/bin/bash -X
#fields: id|alias|booking_time|contact_no|deleted|grace|number_in_queue|pax|seated_time|status|walk_in_time|queue_id|user_id
echo "Bash version ${BASH_VERSION}..."
for i in {1..5..1}
do
_alias="Name$i"
_contact_no=$(cat /dev/urandom | tr -dc '1-9' | fold -w 10 | head -n 1)
_deleted="FALSE"
_number_in_queue=$i
_pax=$(( $RANDOM % 10 + 20 ))
_status="waiting"
_queue_id=424
_user_id=550
mysql -u root -p restbucks << EOF #Want this to execute only One time
INSERT INTO queue_item VALUES ('','$_alias',now(),'$_contact_no','$_deleted',NULL,'$_number_in_queue','$_pax',now(),'$_status',now(),'$_queue_id','$_user_id');
EOF
done
每次我尝试 运行 脚本时,它都会要求我输入密码。我想要的是只有建立连接后。
那是因为它是放在for循环里面的。每次控制传递到循环时,它都会被执行。连接后无需连接到服务器。尝试将语句放在 FOR 语句之前。
您可以在 for 循环之前移动 mysql 连接。
mysql -u root -p restbucks << EOF #this execute only One time
for i in {1..5..1}
do
.....
done
EOF
另外建议您可以将查询写入一个文件,然后最后使用单连接执行该文件。
可以参考bulk-mysql-query
我有一个脚本将执行插入查询 n 次 - 为此我使用了 FOR 循环,但问题是连接到远程 mysql 的命令也执行了 n 次。这是解决我的问题的更好主意的脚本。
#!/bin/bash -X
#fields: id|alias|booking_time|contact_no|deleted|grace|number_in_queue|pax|seated_time|status|walk_in_time|queue_id|user_id
echo "Bash version ${BASH_VERSION}..."
for i in {1..5..1}
do
_alias="Name$i"
_contact_no=$(cat /dev/urandom | tr -dc '1-9' | fold -w 10 | head -n 1)
_deleted="FALSE"
_number_in_queue=$i
_pax=$(( $RANDOM % 10 + 20 ))
_status="waiting"
_queue_id=424
_user_id=550
mysql -u root -p restbucks << EOF #Want this to execute only One time
INSERT INTO queue_item VALUES ('','$_alias',now(),'$_contact_no','$_deleted',NULL,'$_number_in_queue','$_pax',now(),'$_status',now(),'$_queue_id','$_user_id');
EOF
done
每次我尝试 运行 脚本时,它都会要求我输入密码。我想要的是只有建立连接后。
那是因为它是放在for循环里面的。每次控制传递到循环时,它都会被执行。连接后无需连接到服务器。尝试将语句放在 FOR 语句之前。
您可以在 for 循环之前移动 mysql 连接。
mysql -u root -p restbucks << EOF #this execute only One time
for i in {1..5..1}
do
.....
done
EOF
另外建议您可以将查询写入一个文件,然后最后使用单连接执行该文件。
可以参考bulk-mysql-query