我正在尝试创建一个运行大量 SQL 脚本的 shell 脚本。
我有这些文件:
$ ls 升级/ 01-foo.sql 02-bar.sql 02-baz.sql 03-foo1.sql 04-buz.sql
我已经得到了当前数据库的版本,例如DB_VERSION=02
我现在如何轻松地循环并全局化前缀大于我的 $DB_VERSION 的文件,并按顺序运行它们?
即我想做
对于 f 在 ???? ;做 mysql < $f 完毕
并且,在 DB_VERSION=02 的情况下,按顺序运行03-foo1.sql
和,。04-buz.sql
答案1
初始设置:touch 01-foo.sql 02-bar.sql 02-baz.sql 03-foo1.sql 04-buz.sql 09-quux.sql 10-lala.sql 99-omg.sql
实际代码:curr=02; for file in ??-*.sql; do ver="${file:0:2}"; [ "$ver" -gt "$curr" ] && echo "$file"; done
即,将当前版本定义为02
,然后查看所有文件(通配符按字母顺序排列),如果它们的数字前缀在数字上更大则执行它们。替换mysql
(或者你有什么)echo
。