• ベストアンサー

UNIXでシェルスクリプトを作ることを始めましたが、まだ未熟者です。

UNIXでシェルスクリプトを作ることを始めましたが、まだ未熟者です。 既存のスクリプトが複数あるのですが、 全てに対して同じ処理を入れ込む必要があります。 入れ込む内容はレイアウトを変更するだけ(awkで書く予定)なので簡単なのですが、 既存スクリプトに全て書き込むのは大変です。 また入れ込んだ処理内容に変更があったときに、全てのスクリプトに変更をひとつひとつ反映させるのは大変です。 入れ込む処理を別ファイルで作成しておいて、 既存スクリプトからはこのファイルを参照するだけにしたいのですが、 どのように書いたらいいのでしょうか?教えてください。

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

  • ベストアンサー
  • MOMON12345
  • ベストアンサー率32% (1125/3490)
回答No.1

どのくらいのデータ(何種類のデータ)を渡すのか、リターンはあるのかなどによっても違ってくると思います。 複雑なものとか引数が多いならファイルで渡して、スクリプトにはファイル名だけを渡す仕組みとか、引数が少ないならパイプで良いのではないでしょうか。 ただ、リターンがある場合はちょっと面倒ですね。 スクリプトAからスクリプトBに処理が渡って、再度スクリプトAに戻すのか?それともスクリプトAを待たせるのか、などなど。 私だったらどうするかなぁ、全てのスクリプトに自動で共通処理スクリプトを入れ込むスクリプトを書くかな(笑) データの流れや個数その他を書かれた方が回答が付きやすいと思います。

koaraki
質問者

お礼

早速の回答ありがとうございます。 情報が足りませんでしたね。 既存スクリプトの流れ。  入力ファイル(10カラム)→4カラム目の値を変換→DB取込ジョブを起動。 入力ファイルが11カラムに変更されるのですが、既存スクリプトの最初で10カラムに削ってしまおうと考えています。 同じような既存スクリプトが20個あって、全て同じように10カラムに削る処理を入れたいです。 入れる対象は20個なので入れ込む作業は手でやります。 10カラムに削る処理を別ファイルに作って、 既存スクリプトの頭でこの別ファイルの処理をやるよう参照する方法がありますでしょうか?

関連するQ&A

  • シェルスクリプトについて

    とあるUNIXサーバが1台あるとします。 でそのマシン上の管理プログラムが同一マシン上にある 「シェルスクリプト(bash)」をキックするとします。 となるとそのシェルスクリプトの実行者(?)は Unixにログオンしているユーザーになるのでしょうか?。 目的としてはそのログインしているユーザーの環境変数 をシェルから参照したいのですが・・ 考え方がWindowsなもので。。すみませんが よろしくお願いします。

  • UNIXのシェルスクリプト

    UNIXのシェルスクリプトで以下のようなことをやりたいのですがいい方法を教えて下さい。 ファイルの中にある文字列があります。 たとえば”CURREND_DIR” この文字列をシェルスクリプトでカレントのディレクトリパスに変換したいのですが いい方法が思いつきません。 set dir_data = ‘pwd‘ sed -e ’s/CURRENT_DIR/$dir_data’ ファイル名 でできるかなと思ったのですが、”CURRENT_DIR”が”$dir_data”に置換されてしまいます。 さらにdirパスが”/”で区切られていることも問題のようです。

  • 簡単なシェルスクリプトを見てください。

    次のようなシェルスクリプトを作成しました。 #!/bin/sh echo [$1] awk '/"0312345678"/ {print}' /test > /test1 awk '/$1/ {print}' /test > /test2 のように簡単なスクリプトです。 $ sample \"0312345678\" で実行させたら、echo では"0312345678"に出力されます。 しかし、test1にはちゃんと結果が入っていますが、test2は空のファイルです。 なぜ、結果が違うのですか? 実行時、引数を渡す方法で、test1と同じ結果を得たければ、どうすればいいのですか?

  • UNIXシェルスクリプト

    お世話になります。 会社でUNIXシェルスクリプトを用いて残業申請自動送信メールの作成をしています。 下記のフローで作成したのですが、端末エミュレータを切るとjobが消えてしまい困っています。 バックグラウンドで実行したのですが、実行されませんでした。 回答よろしくお願いします。 at(指定時刻にメール送信)→sleep(来週の頭になるまで待つ)→goto(最初に戻る) と無限にatコマンドを週一回実行するスクリプトです。

  • UNIX シェルスクリプト

    UNIXのシェルスクリプトを使用してテキストファイルのある列にある 特定の文字列を条件としてその行を出力するということをやりたいのですが どのようにすればできるでしょうか? 例えば,以下のようなテキストファイルがあって,2列目がYAHOOの行を 主力したいというようなことです。 AAA SOFTBANK BBB YAHOO YAHOO TEST CCC QUICK DDD YAHOO ↓ BBB YAHOO DDD YAHOO

  • UNIXのシェルスクリプトで負数の正負を反転させるには?

    UNIXのシェルスクリプトで負の数の符号を反転して生の数にしようと思ったらうまくできませんでした。 #! /bin/sh NUM=4 NUM2=-$NUM echo NUM2=$NUM2 とすると --4 となってしまいました。 また、 NUM2=`expr $NUM * (-1)` 等もやってみたのですが、エラーになりました。 結局、文字列としてawkで'-'を削ったのですが、やり方を間違えてる気がしてなりません。 awkやperl等を使わず、UNIXの単純な機能だけで数の正負を反転させる方法があれば教えてください。 基本情報でよくある2進数の符号の反転のやり方でもできると思うのですが、 10進数だとやり方がよくわかりません、、これでできるなら、このやり方も教えていただけるとありがたいです。 以上、よろしくお願いします。

  • 【継続質問】シェルスクリプトを用いて、ある特定の文字列の前に文字列を挿入

    シェルスクリプトを用いて、ある特定の文字列の前に文字列を挿入 の継続質問です。よろしくお願いします。 tacとawkを用いて、"ある特定の文字列の前に文字列を挿入"ということができるのは、 確認することができました。 例えば、  script.awk (awkスクリプト)  sample.txt (処理対象ファイル) という環境で、  $ cat script.awk  $ tac sample.txt | awk -f script.awk | tac > sample2.txt とコマンドを入力した場合、 sample2.txtに、処理が完了したテキストが作成され、 中身も問題ないことを確認できました。 しかし以下のようなことを実現しようと思うと、 うまく行きませんでした・ 「非対話的に上記の処理を行いたいのです」 上記の方法では、 catとtacと2回コマンドを叩く必要があります (1回にもできるのでしょうが…) できれば、自動的に流れる膨大なシェルスクリプトの処理の中で、 上記の処理を自動的に行うということを実現したいのです。 例えば、auto.shというシェルを実行すれば、 勝手にawkスクリプトを読み込み、勝手に変換したものを出力してくれる… そのようなシェルを作成したいと考えています。 そこで色々試しましたが上手くいきません。 1.コマンドの分解ができない tac sample.txt | awk -f script.awk | tac > sample2.txt の上記を、  #!/bin/sh  tac sample.txt  awk -f script.awk  tac > sample2.txt のようにシェルスクリプトに記述しなおして実行しましたが、 上手くいきませんでした。 2.script.awk(awkスクリプト)を内部に取り込み 外部ファイルとして存在している、script.awkをなんとか シェルに組み込もうと思って、  awk {(script.awkの内容をそのまま記述)} のように行いましたが、文法的にやはり無茶苦茶でした・・・。 正直、2番が無理であれば仕方ありませんが、 最低でも1は実現したいと思います。 1の方法だけでも良いので、どなたか回答をお願いします。

  • UNIXのシェルについて教えてください。

    UNIXシェル初心者です困っていますので教えてください。 (例) /tmp/test.txtのファイルがあるといたします。 このファイルの中身は、下記のようになっております。 01 一番 一郎 02 二番 次郎 04 三番 太郎 05 四番 吾郎      ・      ・ この中身をUNIXシェルを利用して/tmp/test1.csvに書き出し 内容を下記ように変更したいです。 01 一番 一郎 背番号 01 である。 02 二番 次郎 背番号 02 である。 04 三番 太郎 背番号 04 である。 05 四番 吾郎 背番号 05 である。      ・      ・ 実際に実施した/tmp/test.txtファイルは何百行もあり手動で作成するのは 手間です。 よろしくお願いいたします。

  • シェルスクリプトについて(POSIX)

    シェルスクリプトを書いていますが、思うように動きません。シェルにお詳しい方がいらっしゃいましたら、ご教授ください。以下のような仕様です。 1.Working dierctoryの中から目的のファイルを検索 2.検出されたファイルの内容を1行ずつ表示させる。 このような簡単な仕様なのですが、awkを使用する必要はありますでしょうか? シェルは初めてなので勉強不足なため、ここで質問するにあたり、情報が不足していましたら、どうぞ補足してください。宜しくお願い致します。

  • UNIXシェルプログラム等からバイナリーファイルを作成する方法

    UNIX環境で、ある出力を得るために、複数の Perl スクリプト、シェル スクリプト、またバイナリのプログラムを決まった手順で実行しています。最近になって、これらのプログラムをすべて他の人に譲り渡す必要が生じたのですが、スクリプトの中にソースは配布できないものが含まれています。 そこで、これらのプログラムをまとめて一つのバイナリ実行ファイルを作成できないかと思案しているのですが、それは可能でしょうか。また可能な場合、どのようにしたらよいのか教えていただけないでしょうか。 よろしくお願いします。

専門家に質問してみよう