经常会遇到这种情况,在一个不能上网的环境通过MysqL客户端登录数据库,想执行一个 *** 作,却忘了 *** 作的具体语法,各种不方便。
其实,MysqL数据库内置了帮助文档,通过help contents即可查看。
如下所示:
可见,该文档涵盖了数据库 *** 作的大部分主题。
文档分为以上几大类,每个大类又包括更小粒度的类,类最后有具体的topic组成。
那么这之间的层级关系如何呢?
昨天想执行一个 *** 作
MysqL> backup table emp to '/tmp/MysqLbackup';
因为这个backup *** 作以前没有使用过,准备用MysqL自带的帮助文档来查看具体的用法。本来这个命令所属的类别就有点模糊,譬如administration和Utility都有可能。最后找了一通,还是没有找到。
想了想,这样查看帮助文档确实没有太大的效率,如果知道这之间的层级关系就好办了。
于是,动手写了个脚本,可直观的显示帮助文档中大类与小类,小类与topic之间的关系。
具体如下:
#!/bin/bash#所有 *** 作都是在/tmp/test中 *** 作,因为中间新建了很多临时文件,方便后续的删除。mkdir /tmp/test#获取上图的内容重定向到/tmp/test/test.txt文件中MysqL -uroot -p123456 -e "help contents " > /tmp/test/test.txt#定义输出的格式,\t输出tab,\b相当于backspace一个空格,参考了tree命令的输出方式。format=|\t\b"#删除第一行和最后一行sed -i '1d;$d' /tmp/test/test.txtcd /tmp/test#引入number的作用在于后续格式的输出number=0#后续用了递归调用,这里定义的是函数function recursive(){filename=$1number=$[$number+]while read linedo#name要做为文件名,譬如Account Management,利用tr函数是去掉字符中间的空格name=`echo $line|tr -d [:blank:]`#输出每个分类中的内容,可能是topic,可能是categorIEsMysqL -uroot -p123456 -e help $line" > $name#取输出文件的第一行的内容,如果是具体的topic,则第一行的内容为:name: ALTER USER',不然就还是categorIEs,需要递归调用firstline=`head - $name`#整个逻辑比较复杂的有两类,一个是Numeric Functions,另一个是PLUGINS。先说PLUGINS,一般对于一个具体的topic,它的输出类似于name: ,而PLUGINS#对应的输出却是name: SHOW PLUGINS',所以下面的判断语句多了一个$firstline" = name: 'SHOW PLUGINS',针对的即是PLUGINS。另一比较复杂的是Numeric Functions#它下面的topic有除号“/”,而这基本上是不能作为文件名的。所以在下面的判断逻辑中,如果遇到Numeric Functions,就直接打印出该类中的topic,而不进行name: 这样的判断if [ name: '$line'" -o " ];thenfor i in `seq $[$number-]`do echo -ne $formatdoneecho ├── $line"else#如果不是topic,则代表是categorIEs,可递归进行判断,唯一的例外就是Numeric Functions#下面的echo 打印出的是categorIEs的名字#遇到Numeric Functions,就直接打印出该类中的topic$lineNumeric Functionsthen $name read functions doseq $number`├── $functions"done < $name#其它的categorIEs,递归调用该函数进行判断。 $namerecursive $namenumber=$[$number-fi $filename}#主函数recursive /tmp/test/test.txt#处理完毕,删除文件夹rm -rf /tmp/test
因MysqL客户端登录数据库的时候,直接指定了密码,如果直接执行的话,会输出很多“Warning: Using a password on the command line interface can be insecure.”,
可重定向到一个文件
# sh 2.sh > 1.txt
最后文件中的结果如下:
├── Account Management| ├── ALTER USER| ├── CREATE USER| ├── DROP USER| ├── GRANT| ├── REname USER| ├── REVOKE| ├── SET PASSWORD├── administration| ├── binlog| ├── CACHE INDEX| ├── FLUSH| ├── FLUSH query CACHE| ├── HELP COMMAND| ├── KILL| ├── LOAD INDEX| ├── reset| ├── SET| ├── SHOW| ├── SHOW AUTHORS| ├── SHOW BINARY LOGS| ├── SHOW binlog EVENTS| ├── SHOW CHaraCTER SET| ├── SHOW ColLATION| ├── SHOW ColUMNS| ├── SHOW CONTRIBUTORS| ├── SHOW CREATE DATABASE| ├── SHOW CREATE EVENT| ├── SHOW CREATE FUNCTION| ├── SHOW CREATE PROCEDURE| ├── SHOW CREATE table| ├── SHOW CREATE TRIGGER| ├── SHOW CREATE VIEW| ├── SHOW DATABASES| ├── SHOW ENGINE| ├── SHOW ENGInes| ├── SHOW ERRORS| ├── SHOW EVENTS| ├── SHOW FUNCTION CODE| ├── SHOW FUNCTION STATUS| ├── SHOW GRANTS| ├── SHOW INDEX| ├── SHOW MASTER STATUS| ├── SHOW OPEN tableS| ├── SHOW PLUGINS| ├── SHOW PRIVILEGES| ├── SHOW PROCEDURE CODE| ├── SHOW PROCEDURE STATUS| ├── SHOW PROCESSList| ├── SHOW PROfile| ├── SHOW PROfileS| ├── SHOW RELAYLOG EVENTS| ├── SHOW SLAVE HOSTS| ├── SHOW SLAVE STATUS| ├── SHOW STATUS| ├── SHOW table STATUS| ├── SHOW tableS| ├── SHOW TRIGGERS| ├── SHOW VARIABLES| ├── SHOW WARNINGS├── Compound Statements| ├── BEGIN END| ├── CASE STATEMENT| ├── CLOSE| ├── DECLARE CONDITION| ├── DECLARE CURSOR| ├── DECLARE HANDLER| ├── DECLARE VARIABLE| ├── FETCH| ├── GET DIAGNOSTICS| ├── IF STATEMENT| ├── IteraTE| ├── LABELS| ├── LEAVE| ├── LOOP| ├── OPEN| ├── REPEAT LOOP| ├── RESIGNAL| ├── RETURN| ├── SIGNAL| ├── WHILE├── Data DeFinition| ├── ALTER DATABASE| ├── ALTER EVENT| ├── ALTER FUNCTION| ├── ALTER LOGfile GROUP| ├── ALTER PROCEDURE| ├── ALTER SERVER| ├── ALTER table| ├── ALTER tableSPACE| ├── ALTER VIEW| ├── CONSTRAINT| ├── CREATE DATABASE| ├── CREATE EVENT| ├── CREATE FUNCTION| ├── CREATE INDEX| ├── CREATE LOGfile GROUP| ├── CREATE PROCEDURE| ├── CREATE SERVER| ├── CREATE table| ├── CREATE tableSPACE| ├── CREATE TRIGGER| ├── CREATE VIEW| ├── DROP DATABASE| ├── DROP EVENT| ├── DROP FUNCTION| ├── DROP INDEX| ├── DROP PROCEDURE| ├── DROP SERVER| ├── DROP table| ├── DROP tableSPACE| ├── DROP TRIGGER| ├── DROP VIEW| ├── REname table| ├── TruncATE table├── Data Manipulation| ├── CALL| ├── DELETE| ├── DO| ├── DUAL| ├── HANDLER| ├── INSERT| ├── INSERT DELAYED| ├── INSERT SELECT| ├── JOIN| ├── LOAD DATA| ├── LOAD XML| ├── REPLACE| ├── SELECT| ├── UNION| ├── UPDATE├── Data Types| ├── auto_INCREMENT| ├── BIGINT| ├── BINARY| ├── BIT| ├── BLOB| ├── BLOB DATA TYPE| ├── BOolEAN| ├── CHAR| ├── CHAR BYTE| ├── DATE| ├── DATETIME| ├── DEC| ├── DECIMAL| ├── DOUBLE| ├── DOUBLE PRECISION| ├── ENUM| ├── float| ├── INT| ├── INTEGER| ├── LONGBLOB| ├── LONGTEXT| ├── MEDIUMBLOB| ├── MEDIUMINT| ├── MEDIUMTEXT| ├── SET DATA TYPE| ├── SMALliNT| ├── TEXT| ├── TIME| ├── TIMESTAMP| ├── TINYBLOB| ├── tinyint| ├── TINYTEXT| ├── VARBINARY| ├── VARCHAR| ├── YEAR DATA TYPE├── Functions| ├── Bit Functions| | ├── &| | ├── <<| | ├── >>| | ├── BIT_COUNT| | ├── ^| | ├── || | ├── ~| ├── Comparison operators| | ├── !=| | ├── <| | ├── <=| | ├── <=>| | ├── =| | ├── >| | ├── >=| | ├── BETWEEN AND| | ├── COALESCE| | ├── GREATEST| | ├── IN| | ├── INTERVAL| | ├── IS| | ├── IS NOT| | ├── IS NOT NulL| | ├── IS NulL| | ├── ISNulL| | ├── LEAST| | ├── NOT BETWEEN| | ├── NOT IN| ├── Control flow functions| | ├── CASE OPERATOR| | ├── IF FUNCTION| | ├── IFNulL| | ├── NulliF| ├── Date and Time Functions| | ├── ADDDATE| | ├── ADDTIME| | ├── CONVERT_TZ| | ├── CURDATE| | ├── CURRENT_DATE| | ├── CURRENT_TIME| | ├── CURRENT_TIMESTAMP| | ├── CURTIME| | ├── DATE FUNCTION| | ├── DATEDIFF| | ├── DATE_ADD| | ├── DATE_FORMAT| | ├── DATE_SUB| | ├── DAY| | ├── DAYname| | ├── DAYOFMONTH| | ├── DAYOFWEEK| | ├── DAYOFYEAR| | ├── EXTRACT| | ├── FROM_DAYS| | ├── FROM_UNIXTIME| | ├── GET_FORMAT| | ├── HOUR| | ├── LAST_DAY| | ├── LOCALTIME| | ├── LOCALTIMESTAMP| | ├── MAKEDATE| | ├── MAKETIME| | ├── MICROSECOND| | ├── MINUTE| | ├── MONTH| | ├── MONTHname| | ├── Now| | ├── PERIOD_ADD| | ├── PERIOD_DIFF| | ├── QUARTER| | ├── SECOND| | ├── SEC_TO_TIME| | ├── STR_TO_DATE| | ├── SUBDATE| | ├── SUBTIME| | ├── SYSDATE| | ├── TIME FUNCTION| | ├── TIMEDIFF| | ├── TIMESTAMP FUNCTION| | ├── TIMESTAMPADD| | ├── TIMESTAMPDIFF| | ├── TIME_FORMAT| | ├── TIME_TO_SEC| | ├── TO_DAYS| | ├── TO_SECONDS| | ├── UNIX_TIMESTAMP| | ├── UTC_DATE| | ├── UTC_TIME| | ├── UTC_TIMESTAMP| | ├── WEEK| | ├── WEEKDAY| | ├── WEEKOFYEAR| | ├── YEAR| | ├── YEARWEEK| ├── Encryption Functions| | ├── AES_DECRYPT| | ├── AES_ENCRYPT| | ├── COMPRESS| | ├── DECODE| | ├── DES_DECRYPT| | ├── DES_ENCRYPT| | ├── ENCODE| | ├── ENCRYPT| | ├── MD5| | ├── olD_PASSWORD| | ├── PASSWORD| | ├── RANDOM_BYTES| | ├── SHA1| | ├── SHA2| | ├── UNCOMPRESS| | ├── UNCOMpressed_LENGTH| | ├── VALIDATE_PASSWORD_STRENGTH| ├── information Functions| | ├── BENCHMARK| | ├── CHARSET| | ├── COERCIBIliTY| | ├── ColLATION| | ├── CONNECTION_ID| | ├── CURRENT_USER| | ├── DATABASE| | ├── FOUND_ROWS| | ├── LAST_INSERT_ID| | ├── ROW_COUNT| | ├── SCHEMA| | ├── SESSION_USER| | ├── SYstem_USER| | ├── USER| | ├── VERSION| ├── Logical operators| | ├── !| | ├── AND| | ├── ASSIGN-EQUAL| | ├── ASSIGN-VALUE| | ├── OR| | ├── XOR| ├── Miscellaneous Functions| | ├── DEFAulT| | ├── GET_LOCK| | ├── INET6_ATON| | ├── INET6_NTOA| | ├── INET_ATON| | ├── INET_NTOA| | ├── IS_FREE_LOCK| | ├── IS_IPV4| | ├── IS_IPV4_COMPAT| | ├── IS_IPV4_MAPPED| | ├── IS_IPV6| | ├── IS_USED_LOCK| | ├── MASTER_POS_WAIT| | ├── name_CONST| | ├── RELEASE_LOCK| | ├── SLEEP| | ├── UUID| | ├── UUID_SHORT| | ├── VALUES| ├── Numeric Functions| | ├── %| | ├── *| | ├── +| | ├── - BINARY| | ├── - UNARY| | ├── /| | ├── ABS| | ├── ACOS| | ├── ASIN| | ├── atan| | ├── atan2| | ├── CEIL| | ├── CEIliNG| | ├── CONV| | ├── COS| | ├── COT| | ├── CRC32| | ├── degrees| | ├── div| | ├── EXP| | ├── FLOOR| | ├── LN| | ├── LOG| | ├── LOG10| | ├── LOG2| | ├── MOD| | ├── PI| | ├── POW| | ├── POWER| | ├── radians| | ├── RAND| | ├── ROUND| | ├── SIGN| | ├── SIN| | ├── SQRT| | ├── TAN| | ├── TruncATE| ├── String Functions| | ├── ASCII| | ├── BIN| | ├── BINARY OPERATOR| | ├── BIT_LENGTH| | ├── CAST| | ├── CHAR FUNCTION| | ├── CHaraCTER_LENGTH| | ├── CHAR_LENGTH| | ├── CONCAT| | ├── CONCAT_WS| | ├── CONVERT| | ├── ELT| | ├── EXPORT_SET| | ├── EXTRACTVALUE| | ├── FIELD| | ├── FIND_IN_SET| | ├── FORMAT| | ├── FROM_BASE64()| | ├── HEX| | ├── INSERT FUNCTION| | ├── INSTR| | ├── LCASE| | ├── left| | ├── LENGTH| | ├── liKE| | ├── LOAD_file| | ├── LOCATE| | ├── LOWER| | ├── LPAD| | ├── LTRIM| | ├── MAKE_SET| | ├── MATCH AGAINST| | ├── MID| | ├── NOT liKE| | ├── NOT REGEXP| | ├── OCT| | ├── OCTET_LENGTH| | ├── ORD| | ├── position| | ├── QUOTE| | ├── REGEXP| | ├── REPEAT FUNCTION| | ├── REPLACE FUNCTION| | ├── REVERSE| | ├── RIGHT| | ├── RPAD| | ├── RTRIM| | ├── SOUNDEX| | ├── SOUNDS liKE| | ├── SPACE| | ├── STRCMP| | ├── SUBSTR| | ├── SUBSTRING| | ├── SUBSTRING_INDEX| | ├── TO_BASE64()| | ├── TRIM| | ├── UCASE| | ├── UNHEX| | ├── UPDATEXML| | ├── UPPER| | ├── WEIGHT_STRING├── Functions and ModifIErs for Use with GROUP BY| ├── AVG| ├── BIT_AND| ├── BIT_OR| ├── BIT_XOR| ├── COUNT| ├── COUNT disTINCT| ├── GROUP_CONCAT| ├── MAX| ├── MIN| ├── STD| ├── STDDEV| ├── STDDEV_POP| ├── STDDEV_SAMP| ├── SUM| ├── VARIANCE| ├── VAR_POP| ├── VAR_SAMP├── Geographic Features| ├── GEOMETRY| ├── GEOMETRY HIERARCHY| ├── SPATIAL| ├── Geometry constructors| | ├── GEOMETRYColLECTION| | ├── linesTRING| | ├── MulTIlinesTRING| | ├── MulTIPOINT| | ├── MulTIpolyGON| | ├── POINT| | ├── polyGON| ├── Geometry propertIEs| | ├── DIMENSION| | ├── ENVELOPE| | ├── GEOMETRYTYPE| | ├── ISEMPTY| | ├── ISSIMPLE| | ├── SRID| | ├── ST_DIMENSION| | ├── ST_ENVELOPE| | ├── ST_GEOMETRYTYPE| | ├── ST_ISEMPTY| | ├── ST_ISSIMPLE| | ├── ST_SRID| ├── Geometry relations| | ├── CONTAINS| | ├── CROSSES| | ├── disJOINT| | ├── EQUALS| | ├── INTERSECTS| | ├── OVERLAPS| | ├── ST_CONTAINS| | ├── ST_CROSSES| | ├── ST_disJOINT| | ├── ST_disTANCE| | ├── ST_EQUALS| | ├── ST_INTERSECTS| | ├── ST_OVERLAPS| | ├── ST_touches| | ├── ST_WITHIN| | ├── touches| | ├── WITHIN| ├── linestring propertIEs| | ├── ENDPOINT| | ├── GLENGTH| | ├── ISCLOSED| | ├── NUMPOINTS| | ├── POINTN| | ├── STARTPOINT| | ├── ST_ENDPOINT| | ├── ST_ISCLOSED| | ├── ST_NUMPOINTS| | ├── ST_POINTN| | ├── ST_STARTPOINT| ├── MBR| | ├── asymmetric_DECRYPT| | ├── asymmetric_DERIVE| | ├── asymmetric_ENCRYPT| | ├── asymmetric_SIGN| | ├── asymmetric_VERIFY| | ├── CREATE_asymmetric_PRIV_KEY| | ├── CREATE_asymmetric_PUB_KEY| | ├── CREATE_DH_ParaMETERS| | ├── CREATE_DIGEST| | ├── GTID_SUBSET| | ├── GTID_SUBTRACT| | ├── MBR DEFinitioN| | ├── MBRCONTAINS| | ├── MBRdisJOINT| | ├── MBREQUAL| | ├── MBRINTERSECTS| | ├── MbroVERLAPS| | ├── MBRtouches| | ├── MBRWITHIN| | ├── sql_THREAD_WAIT_AFTER_GTIDS| | ├── WAIT_UNTIL_sql_THREAD_AFTER_GTIDS| ├── Point propertIEs| | ├── ST_X| | ├── ST_Y| | ├── X| | ├── Y| ├── polygon propertIEs| | ├── AREA| | ├── CENTROID| | ├── EXTERIORRING| | ├── INTERIORRINGN| | ├── NUMINTERIORRINGS| | ├── ST_AREA| | ├── ST_CENTROID| | ├── ST_EXTERIORRING| | ├── ST_INTERIORRINGN| | ├── ST_NUMINTERIORRINGS| ├── WKB| | ├── ASBINARY| | ├── ASTEXT| | ├── GEOMColLFROMWKB| | ├── GEOMFROMWKB| | ├── liNEFROMWKB| | ├── MliNEFROMWKB| | ├── MPOINTFROMWKB| | ├── MpolyFROMWKB| | ├── POINTFROMWKB| | ├── polyFROMWKB| | ├── ST_ASBINARY| | ├── ST_ASTEXT| | ├── ST_GEOMColLFROMWKB| | ├── ST_GEOMFROMWKB| | ├── ST_liNEFROMWKB| | ├── ST_POINTFROMWKB| | ├── ST_polyFROMWKB| ├── WKT| | ├── GEOMColLFROMTEXT| | ├── GEOMFROMTEXT| | ├── liNEFROMTEXT| | ├── MliNEFROMTEXT| | ├── MPOINTFROMTEXT| | ├── MpolyFROMTEXT| | ├── POINTFROMTEXT| | ├── polyFROMTEXT| | ├── ST_GEOMColLFROMTEXT| | ├── ST_GEOMFROMTEXT| | ├── ST_liNEFROMTEXT| | ├── ST_POINTFROMTEXT| | ├── ST_polyFROMTEXT| | ├── WKT DEFinitioN├── Help Metadata| ├── HELP_DATE| ├── HELP_VERSION├── Language Structure├── Plugins├── Procedures├── Storage Engines├── table Maintenance| ├── ANALYZE table| ├── CHECK table| ├── CHECKSUM table| ├── OPTIMIZE table| ├── REPAIR table├── Transactions| ├── CHANGE MASTER TO| ├── DEALLOCATE PREPARE| ├── EXECUTE STATEMENT| ├── ISolATION| ├── LOCK| ├── PREPARE| ├── PURGE BINARY LOGS| ├── reset MASTER| ├── reset SLAVE| ├── SAVEPOINT| ├── SET GLOBAL sql_SLAVE_SKIP_COUNTER| ├── SET sql_LOG_BIN| ├── START SLAVE| ├── START TRANSACTION| ├── Stop SLAVE| ├── XA├── User-defined Functions| ├── CREATE FUNCTION UDF| ├── DROP FUNCTION UDF├── Utility| ├── EXPLAIN| ├── HELP STATEMENT| ├── USE
总结:
整个脚本在写的过程有两点比较有意思。
1. 函数递归 *** 作,以前没怎么使用Shell进行函数的递归 *** 作。
2. 借鉴tree的输出格式,对结果进行格式化输出。
思路如下:首先定义一个number为0,每次进入一次recursive函数,都会把当前的number加1,如果只是这样的话,那number值将一直增长了,所以在上述脚本else调用recursive函数部分,会在其后执行number=$[$number-1],类似于恢复到上一层目录下。
总结以上是内存溢出为你收集整理的如何将MySQL help contents的内容有层次的输出全部内容,希望文章能够帮你解决如何将MySQL help contents的内容有层次的输出所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)