外部ファイルを使用するシェルの作成について

このQ&Aのポイント
  • 外部ファイルを使用してシェルの中身を編集する方法について教えてください。
  • 具体的には、外部ファイルに***2の部分を書き込み、***1に代入する方法が知りたいです。
  • どのような内容を書けば良いのかわからないため、全部の情報を書きましたが、足りない情報があれば教えてください。
回答を見る
  • ベストアンサー

外部ファイルを使用するシェルの作成について

こんにちわ。プログラミングど素人のpcunixと申します。 これまで直接シェルの中身を編集していましたが、今後利用回数が増えたことから、編集していた箇所を外部ファイル(txtでもcsvでも何でも良い)へ書き込んでおき、その内容を取り込みたいと考えております。 「今まで使用していたシェル」 #!/bin/sh echo start `date` DK_LOG_DIR=./log DK_USR=dkggapp01 DK_PWD=dkggapp01 DK_SID=${ORACLE_SID} DK_OUT_FILE=dk_grp_insert.txt sqlplus -s ${DK_USR}/${DK_PWD}@${DK_SID} << EOF > ${DK_LOG_DIR}/${DK_OUT_FILE} whenever sqlerror exit sql.sqlcode insert into DKZT_GRP ( ******************************* GRP_CD , GRP_MEI_KNJ , GRP_MEI_KNA , GRP_RYS_KNJ , GRP_RYS_KNA , GRP_KNR_KBN_CD , GRP_HJI_KHI_FLG , GRP_HJI_JNJ , BSO_CD , RRI_DEL_FLG , ******************************1 DB_RGS , DB_TRK_D , DB_TRK_JKK , DB_KSS , DB_KSN_D , DB_KSN_JKK, DB_TMP , DB_KSN_GAM_ID ) values ( ******************************* '0123456', '東京センター', 'トウキョウセンター', '営業G', 'エイギョウ', '1', '1', '', '000', '0', ******************************2 'rinji', to_char(systimestamp, 'yyyymmdd'), to_char(systimestamp, 'hh24miss'), 'rinji', to_char(systimestamp, 'yyyymmdd'), to_char(systimestamp, 'hh24miss'), to_char(systimestamp, 'yyyymmddhh24missff3'), 'DK9999B9001' ) ; commit; exit; EOF # 終了判定 DK_RET=$? if [ ${DK_RET} -ne 0 ] then echo 異常終了 ステータス=${DK_RET} exit ${DK_RET} fi echo finish `date` exit ${DK_RET} ***2の部分を外部ファイルに書き込んでおき ***1へ代入するにはどうすれば良いでしょうか? 何を書いたらよいのかわからないので全て書いたつもりですが 足りない情報があったらご指摘いただけますと幸いです。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

単純にデータの追加を行いたいだけなら、SQL*PLUSでなくSQL*LOADERを使う方が早いですよ。 入力データの様式も定義ファイルをお好きなように書けば良いだけですし。

pcunix
質問者

お礼

一応インチキな方法(test.sh△test.txtで実行) で出来ました。 このたびは回答いただき誠にありがとうございました。

関連するQ&A

  • SPOOLのファイル名

    スプールのファイル名にバインド変数の内容を使うことはできるでしょうか? 下記のように使用すると、SPOOLファイルが作成されませんでした。 20050322.TODAYといった具合に SYSDATEに応じてファイル名を可変にしたいのですが。。 どなたかご教示いただければ幸いです。 ============================================== WHENEVER OSERROR EXIT FAILURE ROLLBACK WHENEVER SQLERROR EXIT FAILURE ROLLBACK VARIABLE V_SYSDATE VARCHAR2(8); BEGIN SELECT TO_CHAR(SYSDATE,'YYYYMMDD') INTO :V_SYSDATE FROM DUAL; END; / SPOOL :V_SYSDATE.TODAY SPOOL OFF EXIT;

  • 外部ファイルでのtemplate関数の実装方法

    外部ファイルでのtemplate関数の実装方法 sub.cppにtemplate関数を実装し、 main.cppで、sub.cppのtemplate関数を呼び出す、 みたいなことをやりたいのですが、 コンパイルは通りますが、リンクエラー?になってしまいます。 以下が上記のサンプルプログラムです。 //main.cpp #include <vector> #include <iostream> using namespace std; template <typename t_ret, typename t_array> t_ret sub_t(const t_array&); int main (int argc, char *argv[]) { vector<double> v; v.push_back(1.1); v.push_back(2.2); cout << sub_t<double, vector<double> >(v) << endl; return 0; } // sub.cpp #include <vector> using namespace std; template <typename t_ret, typename t_array> t_ret sub_t(const t_array& array) { return array[0]+array[1]; } //コンパイルログ main.o: In function `main': main.cpp:(.text+0x134): undefined reference to `double sub_t<double, std::vector<double, std::allocator<double> > >(std::vector<double, std::allocator<double> > const&)' collect2: ld returned 1 exit status make: *** [main] Error 1 どなたか、対処方法を教えてください。 宜しくお願いします。

  • ボタンのonclick時における関数コールの仕方

    下記のPHPスクリプトにおいて、updateMemo()関数の中で、テストで、 echo 'in update'; として、関数内に入ったら、文字列表示をするようにしているのですが、 更新ボタンを押しても、updateMemo()関数の中に入ってきません。(in update が表示されません) 関数のコールの仕方が、onclick=の部分でまちがっているのでしょうか? 教えていただきたいです。 <?php ////////////////////////// // メモ内容の閲覧、更新 // ////////////////////////// $sid = (int)$_GET['sid']; var_dump($sid); $con = mysql_connect("*****", "*****", "*****"); // リモートのMySQLデータベースサーバーに接続する mysql_select_db("*****-ideamemo"); // データベースサーバーに存在する(myPHPAdminで作成済みの)データベースを選択する $sql = "SET NAMES utf8;"; mysql_query($sql); $sql = "SELECT * FROM ideamemo_table WHERE sid=$sid;"; $result = mysql_query($sql, $con) or die(mysql_error()); $row = mysql_fetch_row($result); mysql_close($con); //$row[0] = (int)$row[0]; // string⇒int にキャスト echo '<form name="form1" method="POST" action="deleteUpdate.php">'; echo '内容<br>'; echo '<textarea name="textarea" cols="100" rows="30">'.$row[3].'</textarea>'; echo '<br>'; echo '<input type="button" value="更新" onclick="<?php updateMemo('.$sid.');?>">'; //echo '<input type="button" value="更新" onclick="updateMemo();">'; echo '<input type="button" value="削除" onclick="deleteMemo('.$sid.');">'; echo '<input type="button" value="トップページへ" onclick="location.href=\'main.php\'">'; echo '</form>'; var_dump($row[2]); function updateMemo($sid){ //function updateMemo(){ echo 'in update'; // var_dump($sid); // exit; date_default_timezone_set("Japan"); $update = date(Y年m月d日(D)H時i分s秒); $textarea = $_POST['textarea']; var_dump($textarea); var_dump($update); $con = mysql_connect("*****", "*****", "*****"); // リモートのMySQLデータベースサーバーに接続する mysql_select_db("LAA0471050-ideamemo"); // データベースサーバーに存在する(myPHPAdminで作成済みの)データベースを選択する $sql = "SET NAMES utf8;"; mysql_query($sql); $sql = "UPDATE ideamemo_table SET contents = '$textarea', update_date = '$update' WHERE sid=$sid;"; $result = mysql_query($sql, $con); mysql_close($con); // header("Location: main.php"); } function deleteMemo(int $sid){ echo 'in delete'; $con = mysql_connect("*****", "*****", "*****"); // リモートのMySQLデータベースサーバーに接続する mysql_select_db("LAA0471050-ideamemo"); // データベースサーバーに存在する(myPHPAdminで作成済みの)データベースを選択する $sql = "SET NAMES utf8;"; mysql_query($sql); $sql = "DELETE FROM ideamemo_table WHERE sid=$sid;"; $result = mysql_query($sql, $con); mysql_close($con); // header("Location: main.php"); } ?>

    • ベストアンサー
    • PHP
  • bashで実行したsqlの実行結果の戻り値

    bashで実行したsqlの実行結果の戻り値 bashを使用して、DB間の通信の監視を行なおうとしております shellの内容はサーバAでoracleに接続(sqlplus)して、 そこからサーバBへ接続(connect)するだけの記述です。 この時、 MSG=`sqlplus ID/PASSWORD@SID @connect.sql` echo XXX で、@connect.sqlの実行結果を戻り値としてechoさせたいのですが、 この場合、どのように指定すればよいのでしょうか? (上記の状態でshellを実行すると、connect側ではなく、 sqlplusの戻り値が戻ってきてしまいます) ※conenct.sql connect 接続先DBのID/PASSWORD@接続先 exit だけのsqlで、こちらの接続確認は取れております

  • PHPでの検索機能実装について(フレームワーク無し

    PHP初心者です。 現在、PHPにてDBからアクセスし、DBの検索を実装するプログラムを作成しております。 参考HPを元に下記のプログラムを作成したのですが、参考HPのコードではフレームワークが組み込まれており、 フレームワークを組んでいない私のコードではエラーが発生してしまいます。 エラー内容: Warning: mysql_fetch_array() expects parameter 1 to be resource, (省略) line63 Warning: mysql_free_result() expects parameter 1 to be resource, (省略) line74 参考HPでは、search.phpの17行目'$search'が宣言されてない状態で記載されて おりましたので、search.phpの最初にて宣言しました($searchでは検索キーを格納して おります)。 恐れいりますが、ご教示願います。 input.php 検索ワードを送信 <form action="search.php" method="POST"> <input type="text" name="searchkey"> <input type="submit" name="searchid" value="検索"> </form> search.php <?php $search = htmlspecialchars($_POST['searchkey']); //データベースに接続 if (!$con = mysql_connect("ホスト名", "user名", "パスワード")) { echo "接続エラー"; exit ; } //データベースを選択 if (!mysql_select_db("db名", $con)) { echo "データベース選択エラー"; exit ; } //フォームで送られてきた条件を元にSELECT文を作成 $sql = "SELECT * FROM listwhere name LIKE '% . $search . %'"; //SELECT文を実行 if ($res = mysql_query($sql)) { echo "SQLエラー<BR>" ; exit ; } //検索結果<br> echo "<table border=1>" ; while($row = mysql_fetch_array($res)){ //エラー echo "<tr>" ; echo "<td>" . $row["id"] . "</td>" ; echo "<td>" . $row["name"] . "</td>" ; echo "<td>" . $row["date"] . "</td>" ; echo "<td>" . $row["registant"] . "</td>" ; echo "<td>" . $row["comment"] . "</td>" ; echo "</tr>" ; } echo "</table>" ; //結果セットの開放 mysql_free_result($res); //エラー //データベースから切断 mysql_close($con); ?>

    • ベストアンサー
    • PHP
  • OpenCLを用いた"Hello"の表示

    こんにちは、OpenCLの勉強をしている学生です。 OpenCL入門という本を読み、Helloを表示させるサンプルプログラムを実行させたのですがMacbookPro上のMacOSXでは動くのに対し、自作マシンのWindows7上ではコンパイルは通るがうまく動作しないという問題でて、コードをいろいろ書き換えたのですができず悩んでいます。 大まかな環境はそれぞれ以下の通りです。 MacBookPro OS:snow leopard 型番:MacBook Pro 2260/13.3 MB990J/A Xcodeにてビルド 自作マシン OS:Windows7 Enterprise(64bit) CPU:Core2Quad Q9550 GPU:Geforce GTX260 memory:8G visual studio2008 Express Editionにてビルド 1)元のコードは以下の通りです #include"hello.h" #define MEM_SIZE (128) #define MAX_SOURCE_SIZE (0x100000) int main(){ cl_device_id device_id=NULL; cl_context context=NULL; cl_command_queue command_queue=NULL; cl_mem memobj=NULL; cl_program program=NULL; cl_kernel kernel=NULL; cl_platform_id platform_id=NULL; cl_uint ret_num_devices; cl_uint ret_num_platforms; cl_int ret; char string[MEM_SIZE]; FILE *fp; char fileName[]="./hello.cl"; char *source_str; size_t source_size; //カーネルを含むソースコードをロード fp=fopen(fileName,"r"); if(!fp){ fprintf(stderr,"Failed to load kernel.\n"); exit(1); } source_str=(char*)malloc(MAX_SOURCE_SIZE); source_size=fread(source_str,1,MAX_SOURCE_SIZE,fp); fclose(fp); //プラットフォーム、デバイス情報の取得 ret= clGetPlatformIDs(1,&platform_id,&ret_num_platforms); ret = clGetDeviceIDs(platform_id,CL_DEVICE_TYPE_DEFAULT,1,&device_id,&ret_num_devices); //OpenCLコンテキストの作成 context=clCreateContext(NULL,1,&device_id,NULL,NULL,&ret); //コマンドキューの作成 command_queue=clCreateCommandQueue(context,device_id,0,&ret); //メモリバッファの作成 memobj= clCreateBuffer(context,CL_MEM_READ_WRITE,MEM_SIZE * sizeof(char),NULL,&ret); //読み込んだソースからカーネルプログラムを作成 program=clCreateProgramWithSource(context,1,(const char **)&source_str,(const size_t *)&source_size,&ret); //カーネルプログラムをビルド ret = clBuildProgram(program,1,&device_id,NULL,NULL,NULL); //OoenCLカーネルの作成 kernel = clCreateKernel(program,"hello",&ret); //OpenlCL カーネル引数の設定 ret = clSetKernelArg(kernel,0,sizeof(cl_mem),(void *)&memobj); //OpenCLカーネルを実行 ret = clEnqueueTask(command_queue,kernel,0,NULL,NULL); //メモリバッファから結果を取得 ret = clEnqueueReadBuffer(command_queue,memobj,CL_TRUE,0,MEM_SIZE * sizeof(char),string,0,NULL,NULL); //結果の表示 puts(string); //終了処理 ret=clFlush(command_queue); ret=clFinish(command_queue); ret=clReleaseKernel(kernel); ret=clReleaseProgram(program); ret=clReleaseMemObject(memobj); ret=clReleaseCommandQueue(command_queue); ret=clReleaseContext(context); free(source_str); return 0; } 結果は MacbookPro:Hello Windows7:fpに値がなぜか代入されず(fopenがうまく動いてない?)途中(fread)でアクセス違反 2)また、fopen等がだめならと思い、その部分(カーネルを含むソースコードをロード)のコードを以下のように書き直しビルドしました。   fstream ifs(fileName,ios::in); if(ifs.fail()){ fprintf(stderr,"Failed to load kernel"); exit(1); } source_str=(char*)malloc(MAX_SOURCE_SIZE); std::string strbuf,strsrc; while(!ifs.eof())//ファイルの最後まで { ifs.getline(source_str,MAX_SOURCE_SIZE); strsrc+=source_str; } source_str=(char*)strsrc.c_str(); source_size=(int)strsrc.length(); 結果は MacBookPro:Hello Windows7:フフフフフフ‥‥ こちらはデバックするとsource_strなどにはうまく文字列が入っているのですが、kernelに値がはいっていない(0x00000)のです。どうしてそんなことが起きるのか、どう直せばいいかさっぱりです。 できれば1)を少しだけ改良して直したいと思っているのですが、2)の部分も何が原因か分かると嬉しいです。 どうか知恵をお貸しください。よろしくお願いします。

  • crontabで登録したシェルが動かなくなってしまいました

    シェル初心者です。 宜しくお願い致します。 bashコマンドで起動させると上手く動くのですが、 crontabコマンドで登録すると、全く動いてくれないのです。 ネットで色々調べましたが、原因がさっぱりわかりません。 何卒ご教示お願い致します。 【シェルの内容】 ●オラクルに接続し、hoge.sqlにかかれているsql文を実行するシェルです。 cd /h/ho/hog/hoge/ sqlplus hoge/hoge2@hogehoge @/h/ho/hog/hoge/hoge.sql ちなみにhoge.sqlは、以下のような内容です。 (⇒test.sqlの内容をcsvファイルに出力する) set echo off set heading off set pause off set pagesize 0 set linesize 32767 set feedback off set trimspool on set termout off column log_date new_value log_date_text noprint select to_char(sysdate,'yyyymmddhh24miss') log_date from dual; spool TEST_&log_date_text..csv @/h/ho/hog/hoge/test.sql ※test.sqlはselect文です。 spool off exit 納期が近づいているため、かなり焦っています。 宜しくお願い致します。 ●その他 サーバ:Sun OS 5.9 oracle:9.2.0.1.0                          以上

  • php データ削除

    一覧画面に更新、削除というボタンをつくり番号を受け取って削除したいのですが、削除ボタンを押しても画面は変わるのですが削除されません 助けてください 番号 int プライマリーキー 氏名 varchar 住所 varchar 一覧画面のソース <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>一覧画面</title> </head> <body> <BLOCKQUOTE> <BR>一覧画面<BR><BR> <?php $con=mysqli_connect("localhost","root","admin","db_test"); // Check connection if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); } $result = mysqli_query($con,"SELECT * FROM tbl_test"); echo "<table border='1'> <tr> <th>番号</th> <th>氏名</th> <th>住所</th> </tr>"; while($row = mysqli_fetch_array($result)) { echo "<tr>"; echo "<td>" . $row['番号'] . "</td>"; echo "<td>" . $row['氏名'] . "</td>"; echo "<td>" . $row['住所'] . "</td>"; echo "<form action=koushin_input.php method=post>"; echo "<td><input type=submit value=更新></td>"; echo "</form>"; echo "<form action=sakujo.php method=post>"; echo "<td><input type=submit value=削除></td>"; echo "</form>"; echo "</tr>"; } echo "</table>"; mysqli_close($con); ?> <BR><BR><BR> <A HREF="http://localhost/regist.php"> <INPUT TYPE = "SUBMIT" VALUE = "新規登録"></A> </BLOCKQUOTE> </body> </html> 削除ソース  sakujo.php <html> <body> <? // データベースに接続 if(!$con=mysql_connect("localhost","root","admin")){ echo"接続エラー"; exit; } // データベースを選択 if(!mysql_select_db("db_test",$con)){ echo"データベース選択エラー"; exit; } // DELETE文を実行 $sql = "delete from tbl_test where '番号'= 番号; if(!$res=mysql_query($sql)){ echo "SQL実行時エラー"; exit; } // データベースから切断 mysql_close($con); // 登録完了メッセージの表示 echo "削除完了"; ?> </body> </html> どういう風にpostで渡せばいいですか?

    • ベストアンサー
    • MySQL
  • シェルで外部ファイルを取り込む方法

    こんにちわ。 既存のテーブルに新規にレコードを追加するシェルを作って おります。 今回は、test.txtに追加項目を記入しておき $test.sh test.txt と実行することで処理を行っております。 今後の運用を考えて $test.sh と実行するだけでレコードが追加されるようにしたいと 思うのですが、test.shにtest.txtの内容を取り込んで使用 するにはどのように記述すればよいのでしょうか? 「現在の設定」 -test.sh---------------- #!/bin/sh (定義等) insert into ○○○ ( key1 key2 ) values ( '${key1}', '${key2}' -test.txt--------------- key1=12345 key2=日本 どなたかご教授いただけますと幸いです。 以上、よろしくおねがいいたします。

  • phpのデータベースを使用したsqlのエラー

    すみません、PHPでデータベースを読み込み、SQLにて処理するプログラムを作成しているのですが、 再びエラーで止まってしまいまして、困っています。 データベースへのアクセスはできたようなのですが、SQLの処理の部分がエラーになっているのだと思われます。 --------------結果表示-------------- Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\site\search_criteria.php on line 70 @ エラー番号 : 1064メッセージ : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'aaa,bbb,ccc FROM `test_table`' at line 1 @ ------------------------- -----------ソース------------- <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis"> <title>-サイト -検索条件入力ページ-</title> </head> <body> <p>検索条件を入力してください</p><br> <?php # 変数定義関連 # mysqliの定義 global $mysqli; $mysqli = new mysqli('localhost', 'root', "", "****_db"); $link = mysql_connect('localhost', 'root', "", "****_db"); header("Content-type: text/html; charset=shift-jis"); // 文字化け防止 /* 文字セットを utf8 に変更します */ if (!$mysqli->set_charset("utf8")) { printf("処理1:文字コードのセットに失敗しました。: %s\n", $mysqli->error); } else { printf("処理1:文字コードセット-> %s\n", $mysqli->character_set_name()); } printf("<BR><BR>"); #配列定義 $job_name = array("配列定義"); $data = $_GET["job_opening_type"]; //データベースへの接続 if (!$link) { die("処理2:データベースへの接続失敗です。<BR>".mysql_error()); }else{ print("処理2:データベースへの接続成功!<BR><BR>"); } //データベースを選択 if (!mysql_select_db("****_db",$link)){ echo "処理3:データベース選択失敗<BR><BR>"; exit; }else{ echo "処理3:データベースの選択成功です。<BR><BR>"; } $query = file_get_contents("create.sql"); printf("処理4:クエリ->%s",$query); //SELECT文を実行 if($res = mysql_query($query,$link)){ echo "<BR>mysql_query失敗<BR>"; }else{ echo "<BR>mysql_query成功<BR>"; } //検索した結果を全部表示 line 70辺り→while($row = mysql_fetch_array($res,MYSQL_BOTH)){ echo "****=".$row["****"]; echo "****=".$row["****"]; echo "<BR>"; } echo "<BR>@<BR>エラー番号 : " . mysql_errno() . "メッセージ : " . mysql_error() ."<BR>@"; //データベースから切断 $mysqli->close(); echo "<BR><BR>処理5:データベースを切断しました。<BR>"; ?> <br> --------------------------------------------------<br> 最終更新日時<br> <p>&nbsp;</p> </body> </html> 内部のプログラムではなく、外部から読んでいるSQLの問題なのでしょうか? 外部にcreate.sqlというテキストを作成し、 SELECT aaa,bbb,ccc FROM `test_table` としています。 色々試しているのですが、うまくいきません、解決方法を教えて頂きたいです。 よろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう