質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.50%

  • シェル

    282questions

    シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

これはシェルプログラミングで書かれたプログラムでしょうか?PHPに書きかえしたい

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 650

amaguri

score 209

このコードが何で書かれたものかを知りたいです。
コードの内容としてはhiveコマンドからDBとテーブルの構成情報を持ってくる
コードと聞かされていて、
このコードを読解し、hiveコマンドから構成情報持ってくるのではなく、ウェブアプリの様にMySQLで構成情報を持ってきくるようにphpで書き換えを行いたいのです。
そもそもこれはphpで書き換えできるものでしょうか?

#!/bin/sh

. /opt/mapr/mapr_bashrc

BASE_DIR="/var/www/html/WebHive/entity/data"

#データベース一覧情報
LST_DATABASE="$BASE_DIR/database.lst"
echo "[$LST_DATABASE]"
hive -S -e "show databases;" > $LST_DATABASE

while read dbname
do
    #ディレクトリ作成
    if [ ! -d "$BASE_DIR/$dbname" ];then
        mkdir $BASE_DIR/$dbname
    fi
    if [ ! -d "$BASE_DIR/$dbname/table" ];then
        mkdir $BASE_DIR/$dbname/table
    fi
    if [ ! -d "$BASE_DIR/$dbname/partition" ];then
        mkdir $BASE_DIR/$dbname/partition
    fi

    #テーブル一覧
    LST_TABLE="$BASE_DIR/$dbname/table.lst"
    echo "[$LST_TABLE]"
    hive -S -e "use $dbname;show tables;" > $LST_TABLE

    #テーブル情報取得
    TBL_HQL_FILE="$BASE_DIR/$dbname/table.hql"
    TBL_TMP_FILE="$BASE_DIR/$dbname/table.tmp"
    echo "[$TBL_HQL_FILE]"
    echo "use $dbname;" > $TBL_HQL_FILE
    while read tblname
    do
        echo "desc formatted ${tblname};" >> $TBL_HQL_FILE
    done < $LST_TABLE
    hive -S -v -f $TBL_HQL_FILE > $TBL_TMP_FILE

    #テーブル情報個別ファイル出力
    LST_DESC=""
    while read line
    do
        if [ "`echo $line | grep '^desc formatted'`" != "" ];then
            tblname=`echo $line | awk '{print $3}'`
            if [ "$tblname" != "" ];then
                LST_DESC="$BASE_DIR/$dbname/table/${tblname}.dat"
                echo "[$LST_DESC]"
                cp /dev/null $LST_DESC
            fi
            continue
        fi
        if [ "$LST_DESC" == "" ];then
            continue
        fi
        echo $line >> $LST_DESC
    done < $TBL_TMP_FILE

    #パーティション情報取得
    PRT_HQL_FILE="$BASE_DIR/$dbname/partition.hql"
    PRT_TMP_FILE="$BASE_DIR/$dbname/partition.tmp"
    echo "[$PRT_HQL_FILE]"
    echo "use $dbname;" > $PRT_HQL_FILE
    tblname=""
    while read line
    do
        if [ "`echo $line | grep '^desc formatted'`" != "" ];then
            tblname=`echo $line | awk '{print $3}'`
            continue
        fi
        if [ "$tblname" == "" ];then
            continue
        fi
        if [ "`echo $line | grep '^# Partition Information'`" != "" ];then
            echo "show partitions $tblname;" >> $PRT_HQL_FILE
            tblname=""
            continue
        fi
    done < $TBL_TMP_FILE
    hive -S -v -f $PRT_HQL_FILE > $PRT_TMP_FILE 

    #パーティション情報個別ファイル出力
    LST_PART=""
    while read line
    do
        if [ "`echo $line | grep '^show partitions'`" != "" ];then
            tblname=`echo $line | awk '{print $3}'`
            if [ "$tblname" != "" ];then
                LST_PART="$BASE_DIR/$dbname/partition/${tblname}.dat"
                echo "[$LST_PART]"
                cp /dev/null $LST_PART
            fi
            continue
        fi
        if [ "$LST_PART" == "" ];then
            continue
        fi
        echo $line >> $LST_PART
    done < $PRT_TMP_FILE

done < $LST_DATABASE

exit 0
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+2

1行目に #!/bin/sh と記述されていますので、シェルスクリプトですね。
2行目の記述からからbashを思われます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/10/03 11:16

    ありがとうございます!調べて読解していこうと思います。

    キャンセル

+1

シェルスクリプトですね。
当然PHPで書き換えは可能です。
極論で言えば、PHPにもexec()があるので、シェルスクリプト内で実行されているコマンドを投げ込んでいくことも可能です。
が、見たところ質問文に書かれている通り、DB情報をファイルに書き出すスクリプトのようですので、コマンドを介さずにPHPでの処理も可能ですね。
ただ、このシェルスクリプトのコードが読めないのであれば、何を作ればいいのかが事前に分かっている事、という前提は付きますが。

PHPでもCLI実行は勿論可能ですので、cronに登録したりすることも出来ます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/10/03 11:49

    ありがとうございます!やりたいことは頭の中で明確になっているのですが、それがMySQLのDBの中に入っていなくてもしかしたらコマンドを介さずにPHPでの処理ができないかもしれないです。。
    DB一覧はとれるのですが肝心のテーブル一覧構成情報がMySQLには見つからずhiveのDBに中ののみにしか入っていないとなると、PHPでexec()を用いてシェルスクリプト内で実行されているコマンドを投げ込んでいく必要性があるかもしれません。

    キャンセル

同じタグがついた質問を見る

  • シェル

    282questions

    シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。