經常會遇到這種情況,在一個不能上網的環境通過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+1]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 -1 $name`#整個邏輯比較復雜的有兩類,一個是Numeric Functions,另一個是PLUGINS。先說PLUGINS,一般對于一個具體的topic,它的輸出類似于Name: 'ALTER USER',而PLUGINS#對應的輸出卻是Name: 'SHOW PLUGINS',所以下面的判斷語句多了一個"$firstline" = "Name: 'SHOW PLUGINS'",針對的即是PLUGINS。另一比較復雜的是Numeric Functions#它下面的topic有除號“/”,而這基本上是不能作為文件名的。所以在下面的判斷邏輯中,如果遇到Numeric Functions,就直接打印出該類中的topic,而不進行Name: 'ALTER USER'這樣的判斷if [ "$firstline" = "Name: '$line'" -o "$firstline" = "Name: 'SHOW PLUGINS'" ];thenfor i in `seq $[$number-1]`do echo -ne $formatdoneecho "├── $line"else#如果不是topic,則代表是categories,可遞歸進行判斷,唯一的例外就是Numeric Functions#下面的echo "├── $line"打印出的是categories的名字for i in `seq $[$number-1]`do echo -ne $formatdoneecho "├── $line"#遇到Numeric Functions,就直接打印出該類中的topicif [ "$line" = "Numeric Functions" ];thensed -i '1d;$d' $namewhile read functions dofor i in `seq $number`do echo -ne $formatdoneecho "├── $functions"done < $nameelse#其它的categories,遞歸調用該函數進行判斷。sed -i '1d;$d' $namerecursive $namenumber=$[$number-1]fifidone < $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的內容有層次的輸出方法推薦就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持VeVb武林網。