Cシェルで複数の命令を実行する方法とは?

このQ&Aのポイント
  • Cシェルを使用して複数の命令を実行する方法について教えてください。
  • 作成したCシェルでプロシージャを実行できない問題が発生しています。解決策を教えてください。
  • 業務時間にネットを見ることに制限があるため、Cシェルの実装方法について困っています。
回答を見る
  • ベストアンサー

Cシェルで複数の命令を実行

ご無沙汰しております。 業務でUNIX系OSを使用することになったので、教えていただきたいです。 Cシェルにて、packageを呼出し、マスタ更新のシェルを作成しようとしております。 以下作成したCシェル #!/bin/csh sqlplus ユーザID/パスワード@ORACLE_SID declare 変数定義 begin package名.プロシージャ名(引数1, 2, 3); end; / exit -- ここまで-- 上記のシェルを/export/home/oracle/にtest.shと言う名前で作成しており、 /export/home/oracle/test.shにて、実行した結果sqlplusは起動出来ましたが、 プロシージャまで実行してくれないです。 エラーも何も出ているわけではなく、接続に成功後、SQL>と出たままとまってしまいます。 その際、exitと打つと、packageを呼び出そうとしているみたいです・・・。(もちろんここではエラーになります。) Cシェルでこのようなことを実装できる方法をご存知の方、ご教授お願い致します。 ISMSの関係上、業務時間にネットを見ることに制限をかけられ、困ってる次第です。 環境は solaris10 oracle10g です。

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

  • ベストアンサー
  • SaKaKashi
  • ベストアンサー率24% (755/3136)
回答No.1

#!/bin/csh sqlplus ユーザID/パスワード@ORACLE_SID <<EOF1 declare 変数定義 begin package名.プロシージャ名(引数1, 2, 3); end; / exit EOF1 としてみてください

akito0417
質問者

お礼

遅くなり、申し訳ないです。 お蔭様で解決できました! EOF1当たりが何をやっているのかわかりませんが、これから覚えていこうと思います。

その他の回答 (1)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

シェルスクリプトは、「キーボードマクロ」ではありません。 現在のものは ・sqlplusを実行。終了を待つ ・declareをcshまたはunixのコマンドとして実行を試みる … という動作になります。 これは「cshで実装できる方法」ではなく、「sqlplusでログオン→コマンド実行を自動で行う方法」を調べ、それを「シェルスクリプトで記述する」ということになります。 既出の「ヒアドキュメントを使って標準入力から入力」の他、「別ファイルにsqlのスクリプトを保存しておいて、sqlplusで@のあとにファイルを指定して実行」というのもあります。 http://download.oracle.com/docs/cd/B12037_01/server.101/b12170/ch4.htm#sthref773 あと、老婆心ながら。 この程度のスクリプトならどちらでもいいかと思いますが、cshスクリプトはあまりお勧めできません。 sh系を使うようにすることをお勧めします。

akito0417
質問者

お礼

遅くなり申し訳ないです。 色々な実装方法があるのですね。 老後心で助言助かりますが、客先がCシェル指定なもので・・・。 でも、何となくCシェルをお勧めしない理由がわかりました。

関連するQ&A

  • シェルが実行されません

    WWWユーザから、 Process process = Runtime.getRuntime().exec("java -classpath /xx/xx/xx /export/home/test/B001"); は動くのですが、 Process process = Runtime.getRuntime().exec("java /export/home/test/B001.sh"); のようにシェルを呼び出しても動作しません。 また、hulftのジョブ起動からもシェルが動かないのですが、原因は何が考えられますでしょうか? シェルのパーミッションは755なのですが・・

  • BシェルでSQL文を実行

    【OS:AIX】 あるユーザーでCRONを組んでおり、オラクルのプレシジャを読み込ませるシェルプログラムをCシェルで組んでありました。 それをとある理由でBシェルに変更させてチェックしております。 ところがBシェルに変更してから以下のsqlplus文で失敗してしまいます。 ただ、単独でshファイルを実行するときは、SQL文も読み込んでくれて問題なく正常に終了するのですが、crontabで実行させるとSQL文を読み出すところで失敗してしまいます。 何かいけないところはありますでしょうか # SQL*Plusを呼び出しデータ作成 sqlplus ID/PASSWORD@SID < $HOME/script/data.sql ユーザアカウント自体はデフォルトでKシェルで作成されたユーザです。

  • シェルスクリプト(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 で実行するとターミナルがシェルの実行と同時に閉じてしまいますが、シェルを実行したディレクトリーを確認すると、処理が終わっておりました。

  • sqlplusの操作をシェル上で

    RedhatLinuxのシェルスクリプト上で Oracleのsqlplus操作を行うことは可能でしょうか? その場合、どのように記述すればよいでしょう? やりたい内容の例としては以下になります。 #!/bin/sh su -<oracleユーザー> sqlplus ※※※※ SQL> update ※※※ set ※※※ SQL> exit 上のような内容をcronに登録して自動処理をかけたいと考えています。

  • Linuxでシェルスクリプトがフルパスだと実行できない

    Linuxでシェルスクリプトがフルパスだと実行できない こんにちは 現在linuxでシェルスクリプトを記載していて、やっと出来た!と思ったら、なぜかフルパスで実行すると失敗します。 中身は例えば #!bin/sh echo "hello" とし、ファイル名をtest.shとします。 実行時にカレントからだと上手くいきます。 ./test.sh ただし、フルパスで実行するとうまくいきません。 ./home/user/test.sh エラーは以下 bash: ./home/dv3/tet.sh:No such file or directory 所有者はrootでグループもrootにしてあります。 シェルの権限は755にして、rootで実行しています。 なぜカレントだと上手くいき、フルパスだと上手くいかないのでしょうか? パスが必要なコマンドも入っていないのに。。。 どなたかご教授いただけると幸いです。 宜しくお願い致します。

  • シェルからSQLスクリプトを実行する方法を教えて下さい。

    シェルからSQL/Plusを起動し、SQLスクリプトを実行する方法を教えて下さい。 #! /bin/ksh sqlplus ユーザ/パスワード @test.sql exit 0 にすると、ログインユーザを途中で 聞いてきてきます。 因みに、test.sqlは、単なるdesc テーブル名 のみ記載。

  • 複数のsqlファイルを実行するスクリプト

    シェルスクリプトで特定のディレクトリ配下にあるsqlファイルを実行したいのですが、 どのようにすればいいのでしょうか? 今まではsqlファイルが決まっていた為、明示的にファイルを指定出来たのですが、ファイル名が固定でなくなった 為、悩んでいます。 以前は以下のような形で行っていました。 ----------------------------------------- #!/bin/sh #sqlplusでDB接続 sqlplus /nolog <<EOF conn USER (パスワード入力) #ユーザ確認 show user #sql実行 @/home/hoge/sql_01 @/home/hoge/sql_02 @/home/hoge/sql_03 commit; exit EOF ---------------------------------- ここでsql実行したいファイルの特定のディレクトリ配下にある全てのsqlファイル にして実行するようにしたいです。 もし、分かる方いれば教えてください。 よろしくお願いします。

  • CRON で シェル を動かしたい

    Fedora Core で バックアップを取るため夜にJOBを実行させたく思っています。調べた所crontabでスケジュールできるとの事なのでテストをしているのですがうまくいきません。 1. mkdir /home/postgres/BKUP/test このコマンドをcrontab -e に直接書くと狙った時間にtestフォルダが作成されます。 2. バックアップを取る際はもう少し色々やることになると思うのでシェルにして実行させました。ここではテストなので先ほどと同じ分をシェルに書いてcrontab -eでスケジュールしますが作成されません。 ***シェルの内容*** #!/bin/sh mkdir /home/postgres/BKUP/test *********************************** ・/var/log には履歴がかかれていました。 ・シェルには全ての権限をつけました。(777) 何がいけないのでしょうか?教えてください。

  • 自動起動シェルで「su - user -c "command"」が実行できない

    初めて質問いたします。 よろしくお願いします。 OS:solaris8 OSの起動・停止時に自動起動させたいコマンドがあったので、 以下のシェル(testsh)を作成し、/etc/init.dに置き、 /etc/rc0.dにtestshに対しK99testshの名称でシンボリックリンクを作成、 /etc/rc3.dにtestshに対しS99testshの名称でシンボリックリンクを作成しました。 OS起動時には、iii.txtが削除され、 OS停止時には、jjj.txtが削除されると思うのですが、 削除されていませんでした。 OSの起動・停止時ではなく、sh -x testshで起動した場合は、 正常に動作しました。 又、suでユーザーを変更しないスクリプトに変えた場合は、OSの起動・停止時にiii.txt、及びjjj.txtが削除されていたので、 起動・停止時のsuが正常に動作していないように思います。 どなたが原因などお分かりでしょうか? 又は、手順で何か間違いなどありますでしょうか? ご教授よろしくお願いします。 以下シェル(testsh)の内容 #!/bin/sh case "$1" in start) su - user -c "rm /export/home/user/test/iii.txt" ;; stop) su - user -c "rm /export/home/user/test/jjj.txt" ;; *) echo "Usage: $0 {start|stop}" exit 1 ;; esac exit 0

  • シェルスクリプトでPHPを実行したい

    シェルスクリプトでPHPを実行したいのですが、うまくできません。 centos5でcrontabに 20 0 * * * /bin/sh /var/www/html/test/test.sh と登録しています。 cronのlogをみたところ Dec 12 00:20:01 localhost crond[19060]: (root) CMD (/bin/sh /var/www/html/test/test.sh) と記録されていてここまでは問題ないように思えます。 test.shの中身は #!/bin/sh cd /var/www/html/test/ php -f daily.php > result exit になっています。 daily.phpが実行されないので、daily.phpに何かおかしなところがあるのかと思い daily.phpを直接ブラウザから起動してみたところ問題なく処理されました。 このような経緯でtest.shの中身が間違っていると思っているのですがどこが間違っているのか分かりません。 どなたかアドバイス頂けると助かります。

専門家に質問してみよう