MySQLの全てのテーブルをdescした結果一覧を吐くスクリプト

何となくMySQLバージョンも書いてみた。

全体的にダサいけど、とりあえず、ちゃんと動きます。

#!/bin/sh
# 2007/09/03 seratch
# *** get_desc_result.sh - MySQL ver. - ***

# Function
function DeleteTmpFiles
{
    rm -f ${TMP_SQL_FILE}
    rm -f ${TMP_SPOOL_FILE}
    rm -f ${SQL_FILE}
}

function CheckSQLExecution
{
    if [ $? -ne 0 ]; then
        echo "<ERROR> SQL Execute Error!"
        DeleteTmpFiles
        exit 1
    fi
}

function MySQLConnect
{
    mysql -u${USR} -p${PWD} ${DB} < $1 > $2
}

# Define
USR="user_name"
PWD="********"
DB="db_name"

TMP_SQL_FILE=./tmp.sql
TMP_SPOOL_FILE=./tmp.log
SQL_FILE=./desc.sql
SPOOL_FILE=./desc_result.log

# Initialize Files
cat /dev/null > ${SQL_FILE}
cat /dev/null > ${SPOOL_FILE}

# Make SQL File
echo "show tables;" > ${TMP_SQL_FILE}

# Execute SQL
MySQLConnect ${TMP_SQL_FILE} ${TMP_SPOOL_FILE}
CheckSQLExecution

# Make SQL File
i=0
cat ${TMP_SPOOL_FILE} | while read LINE
do
    if [ ${i} -ge 1 ]; then
       echo "select '';"                  >> ${SQL_FILE}
       echo "select '--- ${LINE} ---';"   >> ${SQL_FILE}
       echo "desc ${LINE};"               >> ${SQL_FILE}
    fi
    let i=${i}+1
done

# Execute SQL
MySQLConnect ${SQL_FILE} ${SPOOL_FILE}
CheckSQLExecution

i=0
`which awk` -v i=${i} '{
    if ( $0 ~ /^$/ && i != 1 ) i = 1;
    else if ( $0 ~ /^$/ && i == 1 ) print $0;
    else if ( i == 1 ) i = 2;
    if ( i == 0 ) print $0;
    if ( i == 2 ) i = 0;
}' ${SPOOL_FILE} > ${TMP_SPOOL_FILE}

mv ${TMP_SPOOL_FILE} ${SPOOL_FILE}

echo "--- Script Normal End ---"
DeleteTmpFiles
exit 0


こちらもつまらないものですが、もし需要があればご利用下さい。