- 浏览: 2180959 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (682)
- 软件思想 (7)
- Lucene(修真篇) (17)
- Lucene(仙界篇) (20)
- Lucene(神界篇) (11)
- Solr (48)
- Hadoop (77)
- Spark (38)
- Hbase (26)
- Hive (19)
- Pig (25)
- ELK (64)
- Zookeeper (12)
- JAVA (119)
- Linux (59)
- 多线程 (8)
- Nutch (5)
- JAVA EE (21)
- Oracle (7)
- Python (32)
- Xml (5)
- Gson (1)
- Cygwin (1)
- JavaScript (4)
- MySQL (9)
- Lucene/Solr(转) (5)
- 缓存 (2)
- Github/Git (1)
- 开源爬虫 (1)
- Hadoop运维 (7)
- shell命令 (9)
- 生活感悟 (42)
- shell编程 (23)
- Scala (11)
- MongoDB (3)
- docker (2)
- Nodejs (3)
- Neo4j (5)
- storm (3)
- opencv (1)
最新评论
-
qindongliang1922:
粟谷_sugu 写道不太理解“分词字段存储docvalue是没 ...
浅谈Lucene中的DocValues -
粟谷_sugu:
不太理解“分词字段存储docvalue是没有意义的”,这句话, ...
浅谈Lucene中的DocValues -
yin_bp:
高性能elasticsearch ORM开发库使用文档http ...
为什么说Elasticsearch搜索是近实时的? -
hackWang:
请问博主,有用solr做电商的搜索项目?
Solr中Group和Facet的用法 -
章司nana:
遇到的问题同楼上 为什么会返回null
Lucene4.3开发之第八步之渡劫初期(八)
上篇散仙简单介绍了linux里面各个shell类型的使用,本篇我们来看下如何在shell里面使用数据库mysql,关于mysql的安装可以参考散仙以前的文章:
http://qindongliang.iteye.com/blog/1987199
下面看下如何在脚本里面使用mysql数据库:
首先我们使用which命令,找到mysql的启动路径
首先,回忆下如何登陆mysql
在脚本里登陆代码如下:
上面写的shell脚本,虽然可以登陆,但是由于-p命令会导致mysql停止下来输入密码,所以我们需要想一种简便的方法,来完成登陆
密码直接写在命令行,很不安全,所以我们用mysql一个特殊的配置文件,来读取它,我们需要在$HOME的根目录下,新建一个隐藏的.my.cnf文件,里面写入密码,然后再次测试登陆发现就不需要使用密码了:
下面我们使用-e命令向mysql发送一条命令:
如果我们需要发送多个命令,我们必须使用文件重定向来满足,看下面例子:
我们发现使用EOF重定向后,mysql程序改变了,默认的输出风格,因为mysql检测出来输入时重定向过来的,所以它只返回了原始数据,而不是在数据两边加上了ASCII符号框,这非常利于提取单独的元素。
下面看下如何在命令下添加一条数据到MySQL里:
执行成功后,我们在查看数据结果:
发现我们的插入已经成功了,使用起来非常的简单方便,需要注意的是,我们的插入的SQL数据使用了双引号,所以我们在里面的变量值,要使用单引号括起来,否则shell将不会正确的解析我们的变量数据,最后我们使用$?来测试退出状态码,由此来检测程序是否运行成功。
下面我们在看下如何根据ID删除一条数据:
最后我们来看下,如何使用shell变量接受数据库返回结果:
说明一下-B参数指定mysql程序工作在批处理的模式下,-s参数,列标题和格式化符号都会被禁掉
下面看下mysql导出格式化的HTML的数据:
除此之外,我们还可以导出成XML的格式:
当然利用shell我们还可以干很多事,比如说,备份表,备份库,导入数据,导出数据等,有兴趣的朋友可以继续学习下。
http://qindongliang.iteye.com/blog/1987199
下面看下如何在脚本里面使用mysql数据库:
首先我们使用which命令,找到mysql的启动路径
[root@h1 ~]# which mysql /usr/bin/mysql [root@h1 ~]#
首先,回忆下如何登陆mysql
[root@h1 ~]# mysql root -u -p ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111) [root@h1 ~]# service mysqld stop 停止 mysqld: [确定] [root@h1 ~]# service mysqld start 正在启动 mysqld: [确定] [root@h1 ~]# mysql -u root -p Enter password: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) [root@h1 ~]# mysql -u root -p Enter password: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) [root@h1 ~]# mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 4 Server version: 5.1.73 Source distribution Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | hive | | mysql | | test | +--------------------+ 4 rows in set (0.01 sec) mysql> exit; Bye [root@h1 ~]#
在脚本里登陆代码如下:
[root@h1 826]# cat login.sh MYSQL=`which mysql` $MYSQL -u root -p [root@h1 826]# sh login.sh Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 6 Server version: 5.1.73 Source distribution Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
上面写的shell脚本,虽然可以登陆,但是由于-p命令会导致mysql停止下来输入密码,所以我们需要想一种简便的方法,来完成登陆
[root@h1 826]# cat login.sh MYSQL=`which mysql` $MYSQL -u root -pqin [root@h1 826]# sh login.sh Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 10 Server version: 5.1.73 Source distribution Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
密码直接写在命令行,很不安全,所以我们用mysql一个特殊的配置文件,来读取它,我们需要在$HOME的根目录下,新建一个隐藏的.my.cnf文件,里面写入密码,然后再次测试登陆发现就不需要使用密码了:
[root@h1 ~]# cat .my.cnf [client] password=qin [root@h1 ~]# mysql -u root Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 13 Server version: 5.1.73 Source distribution Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
下面我们使用-e命令向mysql发送一条命令:
[root@h1 826]# cat login.sh #获取mysql执行路径信息 MYSQL=`which mysql` #第一个test是连接的数据库名字 $MYSQL test -u root -e ' select * from person ' [root@h1 826]# sh login.sh +----+--------+------+ | id | name | sex | +----+--------+------+ | 1 | solr | girl | | 2 | lucene | boy | | 3 | hadoop | boy | +----+--------+------+ [root@h1 826]#
如果我们需要发送多个命令,我们必须使用文件重定向来满足,看下面例子:
[root@h1 826]# cat login.sh #获取mysql执行路径信息 MYSQL=`which mysql` #第一个test是连接的数据库名字 #$MYSQL test -u root -e ' select * from person ' $MYSQL test -u root <<EOF show tables; select * from person where sex='boy'; EOF [root@h1 826]# sh login.sh Tables_in_test person id name sex 2 lucene boy 3 hadoop boy [root@h1 826]#
我们发现使用EOF重定向后,mysql程序改变了,默认的输出风格,因为mysql检测出来输入时重定向过来的,所以它只返回了原始数据,而不是在数据两边加上了ASCII符号框,这非常利于提取单独的元素。
下面看下如何在命令下添加一条数据到MySQL里:
[root@h1 826]# cat insert.sh #获取mysql执行路径信息 MYSQL=`which mysql` #第一个test是连接的数据库名字 #$MYSQL test -u root -e ' select * from person ' #定义的插入语句 insertSQL="insert into person(name,sex) values ('$1','$2')" if [ $# -eq 2 ] ; then $MYSQL test -u root <<EOF $insertSQL EOF if [ $? -eq 0 ] ;then echo "插入数据成功!" else echo "插入失败,请检查代码! " fi else echo "参数小于2,不能添加数据!" exit; fi [root@h1 826]# sh insert.sh spring boy 插入数据成功! [root@h1 826]# sh insert.sh hibernate 参数小于2,不能添加数据! [root@h1 826]#
执行成功后,我们在查看数据结果:
[root@h1 826]# sh login.sh Tables_in_test person id name sex 1 solr girl 2 lucene boy 3 hadoop boy 4 java girl 5 spring boy [root@h1 826]#
发现我们的插入已经成功了,使用起来非常的简单方便,需要注意的是,我们的插入的SQL数据使用了双引号,所以我们在里面的变量值,要使用单引号括起来,否则shell将不会正确的解析我们的变量数据,最后我们使用$?来测试退出状态码,由此来检测程序是否运行成功。
下面我们在看下如何根据ID删除一条数据:
[root@h1 826]# cat deletebyID.sh #获取mysql执行路径信息 MYSQL=`which mysql` #第一个test是连接的数据库名字 #$MYSQL test -u root -e ' select * from person ' delSQL=" delete from person where id=$1 " function show { echo "========================person表所有数据=================================" $MYSQL test -u root <<EOF select * from person ; EOF } if [ $# -eq 1 ] ; then show; $MYSQL test -u root <<EOF $delSQL EOF if [ $? -eq 0 ] ; then echo "删除成功!" show else echo "删除失败!" fi else echo "请输入要删除的ID号!" fi [root@h1 826]# sh deletebyID.sh 请输入要删除的ID号! [root@h1 826]# sh deletebyID.sh 3 ========================person表所有数据================================= id name sex 1 solr girl 2 lucene boy 3 hadoop boy 4 java girl 5 spring boy 删除成功! ========================person表所有数据================================= id name sex 1 solr girl 2 lucene boy 4 java girl 5 spring boy [root@h1 826]#
最后我们来看下,如何使用shell变量接受数据库返回结果:
[root@h1 826]# cat r.sh #获取mysql执行路径信息 MYSQL=`which mysql` #第一个test是连接的数据库名字 #$MYSQL test -u root -e ' select * from person ' dbs=`$MYSQL test -u root -Bse 'show databases' ` for db in $dbs do echo "$db" done [root@h1 826]# sh r.sh information_schema hive mysql test [root@h1 826]#
说明一下-B参数指定mysql程序工作在批处理的模式下,-s参数,列标题和格式化符号都会被禁掉
下面看下mysql导出格式化的HTML的数据:
[root@h1 826]# cat e.sh #获取mysql执行路径信息 MYSQL=`which mysql` #第一个test是连接的数据库名字 #$MYSQL test -u root -e ' select * from person ' $MYSQL test -u root -H -e 'select * from person' [root@h1 826]# sh e.sh <TABLE BORDER=1><TR><TH>id</TH><TH>name</TH><TH>sex</TH></TR><TR><TD>1</TD><TD>solr</TD><TD>girl</TD></TR><TR><TD>2</TD><TD>lucene</TD><TD>boy</TD></TR><TR><TD>4</TD><TD>java</TD><TD>girl</TD></TR><TR><TD>5</TD><TD>spring</TD><TD>boy</TD></TR></TABLE>[root@h1 826]#
除此之外,我们还可以导出成XML的格式:
[root@h1 826]# cat x.sh #获取mysql执行路径信息 MYSQL=`which mysql` #第一个test是连接的数据库名字 #$MYSQL test -u root -e ' select * from person ' $MYSQL test -u root -X -e 'select * from person' [root@h1 826]# sh x.sh <?xml version="1.0"?> <resultset statement="select * from person " xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <row> <field name="id">1</field> <field name="name">solr</field> <field name="sex">girl</field> </row> <row> <field name="id">2</field> <field name="name">lucene</field> <field name="sex">boy</field> </row> <row> <field name="id">4</field> <field name="name">java</field> <field name="sex">girl</field> </row> <row> <field name="id">5</field> <field name="name">spring</field> <field name="sex">boy</field> </row> </resultset>
当然利用shell我们还可以干很多事,比如说,备份表,备份库,导入数据,导出数据等,有兴趣的朋友可以继续学习下。
发表评论
-
备忘几个有用的shell脚本
2015-04-07 21:59 1506(1)在shell下,操作hadoop目录,批量命名或删除, ... -
shell脚本杂记(五)
2014-09-22 19:48 20241,找出多个文件所占用的磁盘空间 du f1 f2 [roo ... -
shell脚本杂记(四)
2014-09-19 20:03 17121,wget是一个用于文件 ... -
shell自动化部署批量建立用户和批量SSH配置
2014-09-18 18:29 3626在linux下面,shell脚本熟练使用,有时候可以帮助我们解 ... -
shell自动化部署神器expect
2014-09-17 21:08 4693Shell可以实现简单的控制流功能,如:循环、判断等。但是对于 ... -
shell脚本杂记(三)
2014-09-16 19:58 16151,我们先来熟悉下正则表达式一些字符含义的基础 ^行起始标记 ... -
shell脚本杂记(二)
2014-09-15 21:25 20231,求两个文件的交集comm a.txt b.txt -1 - ... -
shell脚本杂记(一)
2014-09-12 21:50 20371,登陆系统时,$代表 ... -
跟散仙学shell编程(十五)
2014-08-27 21:24 1844上篇文章,散仙简单介绍了,如何在Linux下以shell脚本的 ... -
跟散仙学shell编程(十三)
2014-08-25 20:02 1320上篇散仙主要了讲述了gawk进阶的一些用法,本篇我们来了解下载 ... -
跟散仙学shell编程(十二)
2014-08-22 21:27 1580上篇文章散仙写了关于sed进阶,本篇我们来看下在linux中另 ... -
跟散仙学shell编程(十一)
2014-08-21 21:45 1658上篇散仙写了关于shell里面正则的基础知识,本篇我们来特意学 ... -
跟散仙学shell编程(十)
2014-08-20 21:22 1321上篇文章,散仙简单介绍了在linux中,使用sed和gawk编 ... -
跟散仙学shell编程(九)
2014-08-19 21:49 1709上篇散仙说了如何在linux里面构建更好的交互式shell,本 ... -
跟散仙学shell编程(八)
2014-08-18 21:50 1633上篇散仙说了linux里面函数的使用,本篇我们来看下如何在sh ... -
跟散仙学shell编程(七)
2014-08-15 21:46 1805上篇散仙在文章里描述了如何处理linux信号和脚本控制,本节我 ... -
跟散仙学shell编程(六)
2014-08-14 21:53 2098上篇介绍了linux里面的处理数据的方式,本篇散仙来说下,如何 ... -
跟散仙学shell编程(五)
2014-08-13 21:41 1668上一篇写的是处理用户输入,本篇散仙要写的是linux里面的标准 ... -
跟散仙学shell编程(四)
2014-08-12 21:46 1532上篇介绍了for循环命令 ... -
跟散仙学shell编程(三)
2014-08-11 21:38 1744散仙在上一篇文章里写了关于如何使用if-else以及case等 ...
相关推荐
《跟老男孩学Linux运维:Shell编程实战》第四部分为第14章~第16章,着重讲解Shell脚本开发规范与编码习惯、Shell脚本的调试知识和技巧、Shell脚本开发环境的配置调整和优化等。《跟老男孩学Linux运维:Shell编程实战...
跟老男孩学Linux运维:Shell编程实战 PDF跟老男孩学Linux运维:Shell编程实战 PDF
资深运维架构实战专家及教育培训界*专家十多年的运维实战经验总结,全面系统地讲解运维工作中Shell编程所需的知识点和Shell编程的各种企业级案例。
《LINUX与UNIX Shell编程指南》是一本专为初学者设计的shell编程教程,它深入浅出地介绍了在Linux和UNIX系统中如何使用Shell进行高效自动化任务处理。Shell编程是Linux和UNIX系统中的核心技术,它允许用户通过命令行...
Shell编程是Linux/Unix系统中不可或缺的一部分,它是一种命令行解释器,允许用户与操作系统进行交互,执行系统命令,以及编写脚本自动化任务。在本文中,我们将深入探讨Shell编程的基础知识,包括基本命令、变量、...
Windows Shell 编程.pdf 看过一些对windows 外壳的扩展程序,在使用上一般都是直接利用windows的外壳API做一些工作,因为外壳操作需要一些比较专业的知识,因此,大部分编程人员特别是使用集成编程环境的程序人员对...
Shell 编程中文手册 本手册涵盖了 Shell 编程的基础知识,包括 Shell 概述、Shell 解析器、Shell 脚本入门、Shell 中的变量等。 Shell 概述 Shell 是一种命令行接口,允许用户与操作系统进行交互。学习 Shell ...
《shell编程入门教程》、《shell脚本专家指南》以及《UNIX.shell编程24小时教程》会提供详尽的实例和练习,帮助你巩固所学并深化理解。 总之,Shell编程是Linux/Unix环境中不可或缺的技能,它能够提高工作效率,...
shell编程题目练习,练习基本的shell编程,学习脚本语言,提高效率
跟老男孩学Linux运维:Shell编程实战 完整版 pdf
"Linux与UNIX Shell编程指南" Linux与UNIX Shell编程指南是计算机科学领域中一本经典的指南手册,旨在帮助读者快速掌握Linux与UNIX操作系统下的shell编程技术。下面是从该书中生成的相关知识点: 1. Shell概述 ...
《Windows Shell 编程指南与实例》是一本深入探讨Windows操作系统壳层编程技术的专业书籍。在Windows系统中,Shell指的是用户界面,它为用户提供与操作系统交互的环境,包括桌面、开始菜单、快捷方式等。Shell编程则...
这是一套完整的Unix培训教材,包括Unix常用命令及SHELL编程基础与高级技巧,PDF格式,共30个文件。另有2个Word文档。包内文件清单如下: 01_Shell-文件安全与权限.PDF 02_Shell-使用find和xargs.PDF 03_Shell-...
第十四章 环境和SHELL变量 第十五章 小结 第四部分 基础SHELL编程 第十六章 SHELL脚本介绍 第十七章 条件测试 第十八章 控制流结构 第十九章 SHELL函数 第二十章 向脚本传递参数 第二一章 创建屏幕输出 第...
13Linux下Shell编程之While case演练 14Linux下Shell编程之While case演练 15Shell编程之函数及脚本案例讲解 16Shell编程之函数及脚本案例讲解 17Linux下Shell编程FIND、SED命令实战 18Linux下Shell编程FIND、SED...
6本pdf及chm的shell 编程的书 6本pdf及chm的shell 编程的书 6本pdf及chm的shell 编程的书 6本pdf及chm的shell 编程的书 6本pdf及chm的shell 编程的书
Shell学习的好帮手Shell学习的好帮手Shell学习的好帮手Shell学习的好帮手Shell学习的好帮手
**Shell编程介绍** Shell编程是Linux/Unix操作系统中的一种脚本语言,用于自动化日常任务,交互式地控制操作系统,以及实现系统级别的程序间交互。它提供了命令行接口(CLI)来执行各种系统命令,使用户能够高效地...
shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人笔记shell编程个人...