在IT行业中,shell脚本是一种常用的自动化工具,尤其在服务器管理和数据库维护方面。本文将详细介绍如何使用shell脚本来在指定目录下批量执行SQL脚本,这对于数据库管理员来说是非常实用的技巧。 让我们分析给定的shell脚本: ```bash #!/bin/bash MYDATE=`date +%F'-'%T'-'%w` MYSQL_PATH=/tmp/scripts #指定的目录 LOG_FILE=/tmp/scripts/exec_${MYDATE}.log ``` 这里定义了几个变量: 1. `#!/bin/bash` 是指使用Bash shell解释器来运行脚本。 2. `MYDATE` 存储当前日期和时间,方便记录日志。 3. `MYSQL_PATH` 指定了SQL脚本所在的目录。 4. `LOG_FILE` 是执行日志文件的路径,用于记录每个脚本的执行情况。 接下来的代码部分处理用户交互: ```bash confirm=db_name=db_pass= for file in ${MYSQL_PATH}/*do ... if [ ! $db_name ] ; then read -p "请输入数据库名:" db_name read -p "你输入的数据名是【$db_name】,确认继续请输入--yes--: " confirm fi ... if [ ! $db_pass ] ; then stty -echo #密码输入保护关闭显示 read -p "请输入数据库密码:" db_pass echo -e "\n" stty echo fi ... done ``` 这一部分询问用户输入数据库名和密码。如果未指定数据库名,会提示用户输入,并确认是否继续。密码输入时,使用`stty -echo`隐藏输入,以增强安全性。 然后是脚本的核心部分,它遍历`MYSQL_PATH`目录下的所有文件: ```bash if [ -f "$file" ] ; then postfix=`echo $file | awk -F'.' '{print "."$NF}'` if [ $postfix = ".sql" ] ; then ... fi fi ``` 这里检查文件是否为.sql文件,如果是,则进行SQL脚本的执行。 执行SQL脚本使用的是`mysql`命令行工具: ```bash mysql -uroot -p$db_pass -P3306 --default-character-set=utf8 ${db_name} < $file >& error.log ``` 这里的参数说明: - `-u root` 指定连接MySQL的用户名。 - `-p$db_pass` 提供密码,这里的密码是从用户那里获取的。 - `-P3306` 指定MySQL服务器的端口号,默认是3306。 - `--default-character-set=utf8` 设置字符集为UTF-8。 - `${db_name}` 是用户输入的数据库名。 - `< $file` 从$file文件中读取SQL语句进行执行。 - `&>` 将标准输出和标准错误重定向到`error.log`文件,以便后续检查。 接着,脚本将执行结果和日志写入`LOG_FILE`,并检查是否有错误发生: ```bash echo $file echo -e "\n===========$file=============\n" >>${LOG_FILE} cat error.log >>${LOG_FILE} error=`grep ERROR error.log` if [ -n "$error" ] ; then echo $error exit fi ``` 如果在`error.log`中找到了包含"ERROR"的行,说明执行过程中出现了错误,脚本会输出错误信息并停止执行。 这个shell脚本提供了一个安全且灵活的方式来批量执行指定目录下的SQL脚本。用户可以指定数据库名和密码,执行过程中的错误会被记录在日志文件中,便于后期排查问题。这样的脚本对于日常数据库维护、数据迁移或批量更新等任务非常有用。通过熟练掌握shell脚本,我们可以进一步提升工作效率,减少手动操作带来的风险。
- 粉丝: 6
- 资源: 982
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助