2017-02-14 31 views
0

Я хотел выполнить запрос MySQL из сценария оболочки через некоторое время. Я написал сценарий, но результат не так, как ожидалось. Он снова печатает то же значение из базы данных. Может кому-то помочь.Вызов MySQL-запроса из скрипта оболочки через некоторый промежуток времени

SCRIPT- demo.sh

#!/bin/bash 
echo "Shell Script to Query a Database!" 
echo "--Querying from the Database starts--" 
cd "C:\Program Files\MySQL\MySQL Server 5.7\bin" 
for i in {1..5}; 
do 
./mysql -u root [email protected] << EOF 
use catalyst_latest; 
select id from ci_master limit 1; 
EOF 
echo "Wait for 2 seconds for the next ID." 
sleep 2; 
done 
echo "--Query Stopped!--" 

ВЫВОД

$ ./demo.sh 
Shell Script to Query a Database! 
--Querying from the Database starts-- 
mysql: [Warning] Using a password on the command line interface can be insecure. 
id 
282 
Wait for 2 seconds for the next ID. 
mysql: [Warning] Using a password on the command line interface can be insecure. 
id 
282 
Wait for 2 seconds for the next ID. 
mysql: [Warning] Using a password on the command line interface can be insecure. 
id 
282 
Wait for 2 seconds for the next ID. 
mysql: [Warning] Using a password on the command line interface can be insecure. 
id 
282 
Wait for 2 seconds for the next ID. 
mysql: [Warning] Using a password on the command line interface can be insecure. 
id 
282 
Wait for 2 seconds for the next ID. 
--Query Stopped!-- 

Вы можете видеть, что 282 получение возвращается каждый раз? Поэтому я хочу следующий идентификатор из базы данных через 2 секунды. Скажите, пожалуйста, как это сделать. Спасибо заранее.

ответ

0

Вы должны помнить, возвращаемый id значение в переменную Баш, а затем повторно использовать эту переменную в WHERE пункте запроса, как это:

select id from ci_master where id > $id limit 1 

Чтобы записать вывод команды в переменную используйте что-то вроде этого:

id=$(mysql <options> -Nsqe "<query>") 

опция N, чтобы пропустить имена столбцов (например, ID), параметр s более бесшумной выход, вариант q для кэширования не результат, вариант e для выполнения команды.

Первоначально переменная $id должна быть установлена ​​на некоторое значение, подобное 1 или минимум существующих значений в таблице.

+0

Thank you @Alexander. Я сделал что-то вроде этого - –

0
#!/bin/bash 

echo "Shell Script to Query a Database!" 
echo "--Querying from the Database starts--" 
cd "C:\Program Files\MySQL\MySQL Server 5.7\bin" 
for i in {1..10}; 
do 
temp=`./mysql -u root [email protected] << EOF 
use catalyst_latest; 
select id from ci_master limit $i; 
EOF` 
result='' 
for j in $temp 
do 
result=$j 
done 
#date; 
echo "$result" 
echo "Wait for 1 seconds for the next ID." 
sleep 1; 
done 
echo "--Query Stopped!--"