- ベストアンサー
シェルで外部ファイルを取り込む方法
こんにちわ。 既存のテーブルに新規にレコードを追加するシェルを作って おります。 今回は、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=日本 どなたかご教授いただけますと幸いです。 以上、よろしくおねがいいたします。
- pcunix
- お礼率56% (41/72)
- その他(プログラミング・開発)
- 回答数2
- ありがとう数2
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
. かなぁ? ところで '${key1}' でシェル変数も展開されますか?
その他の回答 (1)
- notnot
- ベストアンサー率47% (4848/10262)
その1:次のどちらがしたいのでしょう? a) test.txt をコマンドで指定しなくても、指定したかのごとくtest.txtから読み込んで動作する b) test.txt の中身を test.shに書き込んで、test.txt を削除しても動くようにしたい その2:省略してある部分を書いてください その3:「今後の運用を考えて」とは具体的にどういう意味ですか?
お礼
レスありがとうございます。 csvファイルを読み込む形式で作成できました。
関連するQ&A
- UNIXのシェル
シェルに関して質問です。 0526とか0525のところは一日ごとにフォルダが作成されます。 unix\yasu\0526\hobby\test.txt unix\yasu\0526\hobby\test.txt unix\tomo\0525\hobby\test.txt unix\tomo\0525\hobby\test.txt ./check.sh MMDD 実行するときにMMDDのところに日付を入れてフォルダがあればコマンド1を実行するようにしたいです。 引数に指定した文字を判定するにはどうしたらいいのでしょうか? よろしくお願いします。 ----------------------------- #シェルの名前は「check.sh」です #! /bin/sh if [ $1 = "日付" ] ; then コマンド1 else コマンド2 fi -----------------------------
- 締切済み
- その他(プログラミング・開発)
- 【Linux】シェルの実行方法を教えて下さい。
【Linux】シェルの実行方法を教えて下さい。 ファイルの中身が#!/bin/bashで始まる拡張子shのシェルがあります。 これを実行するには、どのようなコマンドを打てばよいのでしょうか? 1.rootでログイン。 2.test.shがあるフォルダに、cdで移動する。 3.test.shと入力し、Enterキーを押す。 ↑みたいな感じで良いのでしょうか。 テスト用サーバなので、最悪壊しても良いと上司に言われましたが、 なにぶん時間がないため質問させていただきました。 Redhatでバージョンが3か4だったと思います。 よろしくお願いします。
- ベストアンサー
- Linux系OS
- シェルスクリプト(Bash偏)の実行ファイルに関するご質問があります。
シェルスクリプト(Bash偏)の実行ファイルに関するご質問があります。 ファイル名を変更するシェルスクリプトをbashで行おうとプログラムを作成したのですが、 実行するとbad interpreter: ディレクトリではありません とメッセージが出て終了します。記述に誤りがあるのか、実行の仕方が悪いのか分かりません。教えて下さい。 シェルの記述内容は ファイル名をtest.sh #!/bin/bash/ -f mv A.txt A.ori exit 実行方法として #>chmod x+a test.sh #>./test.sh で行いました。そうしたら、bad interpreter: ディレクトリーではありません とメッセージが出ます。 ちなみに #>. test.sh で実行するとターミナルがシェルの実行と同時に閉じてしまいますが、シェルを実行したディレクトリーを確認すると、処理が終わっておりました。
- ベストアンサー
- Linux系OS
- shからPL/SQLブロックを実行する方法
Solaris上でshスクリプト中からPL/SQLを記述したファイルを呼び出して、Oracleのテーブルに対して操作したいのですが、 test.shファイル #/bin/sh sqlplus userid/password@ddzk test.sqlファイル DECLARE … BEGIN INSERT INTO table VALUES( … ) END; / コマンドラインから $./test.sh を実行すると、 ./test.sh: sqlplus: 見つかりません。 と表示されます。 どなたかshスクリプトからPL/SQLで記述したファイルを実行する 方法をご存知の方、ご教示願います。
- ベストアンサー
- その他(プログラミング・開発)
- シェルの中から他のシェルを呼び出す
例えば、ひとつのシェルファイル( aaa.sh )の中に、 ------------------------- #!/usr/bin/csh set HOME=/home/test/tmp bbb.sh ------------------------- と記述した場合、bbb.shで変数$HOMEを使いたいと思いましたが、 使えないようです。(HOME: 未定義の変数と表示されます) どなたか、これ以外の方法で、このように シェルからほかのシェルを呼び出して、変数も引き継がれるような方法ご存知ないでしょうか? 多分こーやれば、こうなるかも!みたいなご回答でも結構ですので情報提供をお願いします。 どうぞ宜しくお願い致します。
- ベストアンサー
- その他(OS)
- UNIX のシェル 文字の置換について
シェルでファイルの文字列を置換したいです。 /*~*/のコメントの文字なので、1行数を変えたくないです。 ─────────────────────────── ※1文字分の空白を「_」で表示します。 test.txtファイルの「XXXXX」を「aa___」に置換する。 ─────────────────────────── 【test.txt 置換前】 /**************/ /*_XXXXXYYYYY_*/ /**************/ 【シェルの内容 test.sh】 #!/bin/csh set IN_henkan = `printf "%-5s" $1` perl -i -p -e 's/XXX/'$IN_henkan'/g' test.txt 【シェルを実行】 test.sh aa 【test.txt置換前 希望する状態】 /**************/ /*_aa___YYYYY_*/ /**************/ 【test.txt置換前 実際の状態】 /**************/ /*_aa_YYYYY_*/ /**************/ ─────────────────────────── 「aa」の後ろに1文字分の空白しか挿入されないです。
- 締切済み
- Linux系OS
- シェル・スクリプトへの変数の定義方法を教えて下さい。
シェル・スクリプトへの変数の定義方法を教えて下さい。 下記コマンドを実行するには、変数にどの様に指定すれば良いでしょうか。 宜しくお願い致します。 手入力での正しいパラメーターの渡し方。 ./test.sh parm1 parm2 "parm3 a b [\"X\" \"Y\"];" シェル・スクリプトでのパラメーターの渡し方は? #!/bin/bash Cmd=" ????????????? どの様に指定すれば良いでしょうか? ?????????????" buf=$(Cmd)
- 締切済み
- その他(プログラミング・開発)
- Using temporary; Using filesort を回避したい
はじめまして。よろしくお願いします。 下記の場合、Using temporary; Using filesort を回避するには どうしたらよいでしょうか。 次の 2 つのテーブルがあります。 CREATE TABLE `test1` ( `f1` int(11) NOT NULL, `f2` int(11) NOT NULL, PRIMARY KEY (`f1`,`f2`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `test1` VALUES ('1', '2'); INSERT INTO `test1` VALUES ('1', '3'); INSERT INTO `test1` VALUES ('1', '4'); INSERT INTO `test1` VALUES ('2', '1'); INSERT INTO `test1` VALUES ('2', '3'); CREATE TABLE `test2` ( `f1` int(11) NOT NULL, `f2` varchar(20) default NULL, `f3` varchar(20) default NULL, PRIMARY KEY (`f1`), KEY `ix_f2_f3` (`f2`,`f3`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `test2` VALUES ('1', 'A', 'a'); INSERT INTO `test2` VALUES ('2', 'B', 'b'); INSERT INTO `test2` VALUES ('3', 'C', 'c'); INSERT INTO `test2` VALUES ('4', 'D', 'd'); 次の SELECT を実行すると Using temporary; Using filesort が 現れてしまいます。 explain select test2.f2, test2.f3 from test1, test2 where test1.f1 = 1 and test1.f2 = test2.f1 order by test2.f2, test2.f3; order by ... をなくすと問題ないのですが、ソートは必要です。 複数のキーに対してORDER BYを実行する場合 インデックスを使用できないとあるので ix_f2_f3 は使用されず Using filesort となるのはわかるのですが、 Using temporary となる理由と回避方法がわかりません。 ご教示よろしくおねがいいたします。
- 締切済み
- MySQL
- bad interpreterで、シェルが使えません(T_T)
RedHat9ではよく以下のような胃の痛いような エラーがでます。 rootでシェルが実行できないのですが、 どうすれば実行できるでしょうか? ■1.shというシェルファイル #!/bin/sh /bin/touch 1 ■1.shを実行するとエラーになります。。 # ./1.sh : bad interpreter: そのようなファイルやディレクトリはありません ■cronでも動きません。。 /bin/bash: 1.sh: /bin/sh: bad interpreter: No such file or directory
- ベストアンサー
- Linux系OS
- Cシェルについて
Cシェルについて #! /bin/csh ##! /bin/csh -vx setenv NOHUP '/usr/bin/nohup' set AAA_CSH = $NOHUP' XXX.sh file.txt &' ($AAA_CSH >> /dev/null) >>& err.log シェルスクリプトを作成して上記のとおりnohupでXXX.shを実行するように記述します。 エラーがあった場合、err.logに出力するように作成したつもりなのですが、 XXX.shがなかったとき、 「/usr/bin/nohup: XXX.sh:そのようなファイルまたはディレクトリはありません。」 と標準出力されてしまいます。 このエラーメッセージをerr.logに記述するようにしたいのですが、 どうしたらよいでしょうか? よろしくお願いいたします。
- 締切済み
- Linux系OS
お礼
レスありがとうございます。 csvファイルを読み込む形式で作成できました。