質問: "" ];then continue fi echo $line >> $LST_PART //$lineの書き出しを$LST_PARTに追加上書き done < $PRT_TMP_FILE //doneに$PRT_TMP_FILEを出力 done < $LST_DATABASE //doneに$LST_DATABASEを出力 exit 0 ```
回答: > > 今回わからないことは > > ・LST_DATABASE="$BASE_DIR/database.lst"と宣言していきなり、echo "[$LST_DATABASE]"で宣言していない$LST_DATABASEが出てくること。 > > これはLST_DATABASE=$LST_DATABASEなのか? > > > シェル変数は代入の時は$が不要で参照の際は$を付けます。 echo "[echo "[$LST_DATABASE]"]"は、echo "[$LST_DATABASE]"先に$LST_DATABASE が設定内容に置き換わった後でechoが実行されます。[ ]はでーたの両端を括って見やすくした と思われます。 > > ・hive -S -v -f $変数A > $変数B の処理 -vはなんでしょうか?調べてもでてきません。 > > hive -S -f $変数A > $変数B はサイレントモードで$変数ファイルAを$変数Bに出力だと思いますが。。。 > > > hiveコマンドを実行する際の-fオプションに$変数Aを指定していて 実行時のイメージは下記の様に なります hive -S -f ファイルA > ファイルB -Sはサイレントモード -fはコマンドファイル(クエリ)読込み >の意味はリダイレクション、これが無い場合は出力が画面に表示されるので、その出力先をファイルに 変更すると言う意味になります。書込みです。 >>は追加書込みの意味でファイルの最終行に加える事になります。 -vは実行SQL文を出力する様です(指定しないと結果だけ?) > > if [ "$tblname" != "" ];then の動き > > これは"$tblname"の!= が空白の時ということですか? > > これも意味がよくわかりません。 > > "$tblname"=""ならわかるのですが。。。 > > > !=はnotイコールなので空白でない場合になります。 [ ! "$tblname" == "" ]でも同じです。イコールは一つでも良いですが2個が推奨らしいです。 > > ・cp /dev/null $変数 の処理 > > cpはコピーするということで/dev/nullのパスを$変数にコピーするということでしょうか? > > > cp /dev/null $変数 は空の$変数ファイルを作成するまたはファイルを空にすると言う事です > > ・tblname=`echo $line | awk '{print $3}'`の処理 > > $line書き出しをawk {print $3}を利用して入力ファイルの各行の 3番目のフィールドが出力される処理に出力するというのはつまりどういうことになるのでしょうか? > > > 次の行あたりから推測するとPRT_TMP_FILEのファイルにはテーブル名が3番目に存在していて、 その他の行は2フィールド以内と思われる。テーブル名が見つかるとファイル名をLST_PARTに 設定してその中にlineデータを書き込む(アペンド)複数行可能 最終的に$BASE_DIR/$dbname/partition/${tblname}.datと言うファイルが作成される。 ${tblname}=$tblname 同じであるが、上記では問題ないが変数の括りでBASHが誤解しない 様に明示的に指定しています。 余計なお世話かもしてませんが他の不明項目も追加します。 > > . /opt/mapr/mapr_bashrc > > > 外部ファイルを取込実行します。環境変数やfunction等が定義されています。 > > if [ "`echo $line | grep '^desc formatted'`" != "" ];then > > > 読み込まれた行の先頭が'desc formatted’で始まる行$lineであれば出力が行われ”`echo ...`” に値が入るます すると!=""条件がtureとなりthen以降が実行されます。 > > tblname=`echo $line | awk '{print $3}'` > > > $lineにはフィールドセパレータが空白かタブで文字列が作成されていて、これをawkは$1、$2、$3として フィールド処理が行えます。セパレータは-Fにて指定できます。 シェルはファイルハンドリングが得意なのでコマンドでデータを抽出してファイルに書き出し、これをまた読込み処理を行う形態で作成されていると思われます。phpでのシェルコマンド実行結果は、ファイルよりも、配列に格納して同様な処理を行うのも良いと思います。