- ベストアンサー
Unix初心者による初心者シェルプログラミングです。
Unix初心者による初心者シェルプログラミングです。 以下のようなコマンドを羅列しただけの スクリプトが300行(実質100行ぐらい)が漸くできるようになりました。 これだけで、おばかさんな私は進化してます。が・・・ 対象となる、hoge.txtは、同ディレクトリ内に別名で、200ファイル有ります。 このスクリプトがその別名、200ファイルへと対象になります。 と云う事はファイル名分の200ファイル分スクリプトを編集して用意しなくては いけなくなる。 となると・・・ 別の事をしないといけませんよね。 どうやら、同ディレクトリ内にある、全ての .txt ファイルに対してこの スクリプトを実行させるには・・・ (よくわかりませんが・・・) FILE=`/home/foo/*.txt` みたいな・・・(全然違うと思っていますが、イメージで) /home/foo/ 内の .txt ファイルを一ファイルずつ読み込んで、実行させる方法が あると思うのですが・・・ 全てを教えて貰うつもりはありません。 学習していきます。 でも、疲れてきました。 がしかし、やらなくちゃいけません。 ヒント下さい。 お願いします! > cat hogehoge.sh #!/usr/bin/sh DAY=`/usr/xpg4/bin/date '+%Y/%m/%d%a'` HUMAN=`/usr/ucb/whoami` TIME=`/usr/xpg4/bin/date '+%H:%M:%S'` echo echo "$DAY : $HUMAN : PID $$" echo echo "$0" echo echo "$TIME Let's start!" echo echo "ls -l /home/foo/hoge.txt" ls -l /home/foo/hoge.txt echo echo "cat -n /home/foo/hoge.txt | head -15" cat -n /home/foo/hoge.txt | head -15 echo echo "sed -f /home/foo/script.sed /home/foo/hoge.txt > /home/foo/new-hoge.txt" sed -f /home/foo/script.sed /home/foo/hoge.txt > /home/foo/new-hoge.txt echo echo "ls -l /home/foo/new-hoge.txt" ls -l /home/foo/new-hoge.txt echo echo "cat -n /home/foo/new-hoge.txt | head -18" cat -n /home/foo/new-hoge.txt | head -18 echo echo "sed -e '1d' -e '14d' /home/foo/new-hoge.txt > /home/foo/renewal-hoge.txt" sed -e '1d' -e '14d' /home/foo/new-hoge.txt > /home/foo/renewal-hoge.txt echo echo "ls -l /home/foo/renewal-hoge.txt" ls -l /home/foo/renewal-hoge.txt echo echo "diff /home/foo/new-hoge.txt /home/foo/renewal-hoge.txt" diff /home/foo/new-hoge.txt /home/foo/renewal-hoge.txt echo echo "sed -e '13d' -e 's/^iranai/hitsuyou/' /home/foo/renewal-hoge.txt > /home/foo/new-hoge.txt" sed -e '13d' -e 's/^iranai/hitsuyou/' /home/foo/renewal-hoge.txt > /home/foo/new-hoge.txt echo echo "ls -l /home/foo/new-hoge.txt" ls -l /home/foo/new-hoge.txt echo ・ ・ ・ ・ ・ ・ ・ ・ 300
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
キーワード「bash」でGoogle検索すると4番目に次の記事がヒットしました。 http://www.atmarkit.co.jp/flinux/rensai/theory08/theory08b.html 上記ページの中ほどで紹介されている greeting2.sh を ./greeting2.sh * のように引数 * を与えて実行してみてください。
その他の回答 (2)
- sakusaker7
- ベストアンサー率62% (800/1280)
えーと、まずPerlとかRubyの話を出したのは、 処理の内容によってはシェルスクリプトと各種のコマンドを組み合わせて あれこれするよりは、Perlなりで書いてしまったほうが楽なことが多いからです。 次にシェルの種類を訊いたのは、通常シェルスクリプトでは /bin/sh を使うものとして書きますが、Linuxを使ったシステムではこれは 実体がbashなものがほとんどですし、AIXなんかの商用システムでは kshで行われてた拡張が使えるようになってます(全てのシステムではないと思いますが)。 ですのでその辺の確認のためです。 最近はzshも勢力を伸ばしているようですが、さすがにこれでスクリプトも 書いている人はまだ多くはないんじゃないかと。 >現在、tcsh なんですけど、何だか bash の方がよさげですね。 対話的に使うシェルとしてはいいと思いますが、スクリプトを書くのには Cシェル系はオススメできませんです。 とりあえず体系的に知識を得るために Amazon.co.jp: シェルスクリプト - Amazon.co.jp: ホーム http://www.amazon.co.jp/s/ref=nb_ss_gw?__mk_ja_JP=%83J%83%5E%83J%83i&url=search-alias%3Daps&field-keywords=%83V%83F%83%8B%83X%83N%83%8A%83v%83g&Go.x=0&Go.y=0&Go=Go で挙げられているような本の中から、 一つ二つ選んで読んでみてはいかがでしょう? 自分としてはオライリーの Amazon.co.jp: 詳解 シェルスクリプト: 本: アーノルド ロビンス,ネルソン・H.F. ベーブ,Arnold Robbins,Nelson H.F. Beebe,日向 あおい http://amazon.jp/dp/4873112672 とか Amazon.co.jp: 入門bash 第3版: 本: キャメロン ニューハム,ビル ローゼンブラット,Cameron Newham,Bill Rosenblatt,クイープ http://amazon.jp/dp/4873112540 あたりをオススメしますです。 Amazon.co.jp: シェルスクリプト ポケットリファレンス ~bash編 (Pocket reference): 本: 宮原 徹,川原 龍人 http://amazon.jp/dp/4774124818 この種の小さな版型のリファレンス本は何冊か出ているので、 一冊手元に置いとくといいかもしれません。
お礼
環境をbashに切り替えました。 スクリプトを作り直しました。 とにかく完成させることを重視して、/tmp 内に過程のファイルをいくつもつくり できたスクリプトに対してファイルを引数にした200行のシェルスクリプトを作成し 走らせましたら、見事に終える事ができました。 助かりました。 本屋さんで、手に取り以下の本に決めました。 UNIXシェルスクリプトハンドブック 関根 達夫 (著) http://www.amazon.co.jp/UNIX%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%83%8F%E3%83%B3%E3%83%89%E3%83%96%E3%83%83%E3%82%AF-Technical-handbook-001-%E9%96%A2%E6%A0%B9/dp/4797326522/ref=sr_1_8?ie=UTF8&s=books&qid=1197689082&sr=8-8 入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界 Bruce Blinn (原著), 山下 哲典 (翻訳) http://www.amazon.co.jp/%E5%85%A5%E9%96%80UNIX%E3%82%B7%E3%82%A7%E3%83%AB%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E2%80%95%E3%82%B7%E3%82%A7%E3%83%AB%E3%81%AE%E5%9F%BA%E7%A4%8E%E3%81%8B%E3%82%89%E5%AD%A6%E3%81%B6UNIX%E3%81%AE%E4%B8%96%E7%95%8C-%E3%83%96%E3%83%AB%E3%83%BC%E3%82%B9-%E3%83%96%E3%83%AA%E3%83%B3/dp/4797321946/ref=pd_bbs_1?ie=UTF8&s=books&qid=1197689191&sr=8-1
- sakusaker7
- ベストアンサー率62% (800/1280)
たとえばこのスクリプトの、処理対象のファイルの名称を外から 指定できるようにして、 hogehoge.sh *.txt という手段もありますけど(とりあえず引数が大杉という問題は 忘れて)、そういうのはなしですか? ・PerlとかRubyみたいなスクリプト言語を使うのはOK? ・シェルスクリプトを書くのに使うシェルは? たとえばbashとかkshの拡張機能を使っていいかということです。 あと何かあるかな。 まあこの辺も明確なるとそれなりに意見を寄せる 方もいらっしゃるのではと思います。
補足
早い参考意見ありがとうございます。 >たとえばこのスクリプトの、処理対象のファイルの名称を外から指定できるように いきなりですが、ここでつまずきますた・・・・ 外から指定するので、思いつくのは sed -e '1d' $1 > renewal-$1 とかですかね。 この後、色々試してみますが。 >hogehoge.sh *.txt >という手段もありますけど、そういうのはなしですか? ありです。 その方が、教え易く、理解し易く、早くに事を終えられる、そういった面がありそうですね。 >・PerlとかRubyみたいなスクリプト言語を使うのはOK? そうなりますか・・・。 Perlは有りです。 RubyはNGです。理由はconfidentialで w やはり利便性や使用性などの観点からそういった傾向が強いもんなんですか? >・シェルスクリプトを書くのに使うシェルは? たとえばbashとかkshの拡張機能を使っていいかということです。 bashありです。 ksh・・・・あったかな・・・? (今、実環境外からカキコしてます。) >あと何かあるかな。 ゆくゆくはC言語へ発展したい、と思っているので・・・(まだ早いかも) >まあこの辺も明確なるとそれなりに意見を寄せる >方もいらっしゃるのではと思います。 アドバイスありがとうございます。
お礼
環境をbashに切り替えました。 スクリプトを作り直しました。 とにかく完成させることを重視して、/tmp 内に過程のファイルをいくつもつくり できたスクリプトに対してファイルを引数にした200行のシェルスクリプトを作成し 走らせましたら、見事に終える事ができました。 助かりました。 本屋さんで、手に取り以下の本に決めました。 UNIXシェルスクリプトハンドブック 関根 達夫 (著) http://www.amazon.co.jp/UNIX%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%83%8F%E3%83%B3%E3%83%89%E3%83%96%E3%83%83%E3%82%AF-Technical-handbook-001-%E9%96%A2%E6%A0%B9/dp/4797326522/ref=sr_1_8?ie=UTF8&s=books&qid=1197689082&sr=8-8 入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界 Bruce Blinn (原著), 山下 哲典 (翻訳) http://www.amazon.co.jp/%E5%85%A5%E9%96%80UNIX%E3%82%B7%E3%82%A7%E3%83%AB%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E2%80%95%E3%82%B7%E3%82%A7%E3%83%AB%E3%81%AE%E5%9F%BA%E7%A4%8E%E3%81%8B%E3%82%89%E5%AD%A6%E3%81%B6UNIX%E3%81%AE%E4%B8%96%E7%95%8C-%E3%83%96%E3%83%AB%E3%83%BC%E3%82%B9-%E3%83%96%E3%83%AA%E3%83%B3/dp/4797321946/ref=pd_bbs_1?ie=UTF8&s=books&qid=1197689191&sr=8-1
補足
別環境のDarwinでテストしてみました。 なるほど、スクリプトを編集し直さないといけない事が判りました。 なんとかできそうな気がしました。 その、完成したスクリプトを、200行に纏めたシェルスクリプトを作成すれば良い訳ですね。 そこまで行くと、漠然とした不安感が浮上してくるのですが、何か懸念しなくてはいけないこととかありますか? 何も心配していませんが、念の為確認します。 現在、tcsh なんですけど、何だか bash の方がよさげですね。 これから bash 環境に切り替えます。 アドバイスありがとうございます。