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

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

新規登録して質問してみよう
ただいま回答率
85.50%
シェル

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

Q&A

解決済

2回答

2105閲覧

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

amaguri

総合スコア227

シェル

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

0グッド

0クリップ

投稿2016/10/03 01:54

編集2016/10/03 01:58

このコードが何で書かれたものかを知りたいです。
コードの内容としては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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

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

投稿2016/10/03 02:02

Yoshikatsu_

総合スコア47

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

amaguri

2016/10/03 02:16

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

0

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

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

投稿2016/10/03 02:18

kunai

総合スコア5405

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

amaguri

2016/10/03 02:49

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問