MySql是一个广泛使用的数据库操作系统,我们亦可以从shell脚本中访问并操作MySQL数据,我们利用脚本将CSV或者文本文件的内容写入数据库,于MySQL交互并且读取处理数据,我们可以通过shell脚本来执行查询语句

我们将展示如何编写shell去读取到MySql中的数据

我们需要安装了对应的mysql-server和mysql-client,而且需要得到了对应的用户名和密码

我们可以使用sort,awk等Bash工具,来方便我们创建数据库和数据表,向数据表中插入数据,从数据表中读取并显示处理过的数据

创建数据库的脚本如下

#! /bin/bash

#文件名: create_db.sh

#用途: 创建了MySql数据库和数据表

USER=”user”

PASS=”user”

mysql -u $USER -p$PASS <<EOF 2> /dev/null

CREATE DATABASE test1;

EOF

[$? -eq 0] && echo Created DB || echo DB is already exist

#创建表

mysql -u $USER -p$PASS students <<EOF 2> /dev/null

CREATE TABLE students(

id int;

name varchar(100),

mark int,

dept varchar(4)

);

EOF

[ $? -eq 0 ] && echo Created table students || echo Table students

already exist

这样就是建立数据库完成了

然后将数据插入整个数据表

#!/bin/bash

#从csv中读取数据并写入

USER=”user”

PASS=”user”

if [ $# -ne 1 ];

then

echo $0 DATAFILE

echo

exit 2

fi

data=$1

while read line;

do

oldIFS=$IFS

IFS=,

values=($line)

values[1]=”\”`echo ${value[1]} | tr ‘ ‘ ‘#’`\””

values[3]=”\”`echo ${value[3]}`\””

query=`echo ${value[@]} |tr ‘#’ ‘,’`

IFS=$oldIFS

mysql -u $USER -p$PASS students <<EOF

INSERT INTO students VALUES($query);

EOF

done< $data

echo Wrote data into DB

查询脚本如下

#! /bin/bash

USER=”user”

PASS=”user”

depts=`mysql -u $USER -p$PASS students <<EOF | tail -n +2

select distinct dept from studentsl

EOF`

for d in $depts;

do

echo Department : $d

result=”`mysql -u $USER -p$PASS students <<EOF`”

SET @i:=0;

SELECT @i:=@i+1as rank,name,mark FROM students

where dept=”$d” ORDER

BY mark DESC;

EOF`”

echo “$result”

echo

done

对于的脚本实现如下

第一个脚本,我们用来创建数据库students,我们需要用户名和密码,mysql命令用于对mysql进行操作,mysql命令指定了账户密码,然后创建了对应的数据库,为了避免显示错误,我们将错误进行了重定向,然后检查退出状态,来获得是否成功,并打印不同的语句,同理,创建数据表的时候,我们可以进行了错误重定向,然后检查退出状态,如果存在,就会显示一条提示信息

第二个脚本

然后我们接收包含学生数据的CSV,用while循环来读取CSV的每一行,然后,每次迭代都会受到一个逗号分割的句子,我们将其存入了一个数组,然后利用切换IFS来进行存储为一个数组

由于其中name和department 是字符串,我们先将这两个字符串内的空格替换为#,然后替换回来,然后构建成了查询语句

第三个脚本

read_db.sh是用来查询各个系的学生并打印出来各个系的学生排名列表,然后第一次找到各个系的名称,然后查询每个系,并按照成绩的高地进行显示,

SET @i:=0是设置变量i的手段,方便每次查询都增加i显示排名

发表评论

邮箱地址不会被公开。 必填项已用*标注