• ベストアンサー

可変長コマンドとその中のファイル名を変数に格納するには?

宜しくお願い致します。 可変長のコマンド(空白が可変個ある文字列)とそのコマンド文字列内のtxtファイル やdivファイルやpsファイルやtexファイル名(ひとコマンドにファイル名は1つだ け)を取り出し 変数に代入するスクリプトtest.shを考えています。 #!/bin/bash -x COMMAND= FILE= のイコールの右辺には何と記述すればいいのでしょうか? 具体的には $ ./test.sh hoge foo hoe.dvi hoehoe hogehoge … とした時(コマンド分の長さは可変) COMMANDに「hoge foo hoe.dvi hoehoe hogehoge …」という文字列、 FILEに「hoe.dvi」 を代入したいのです。

  • mk278
  • お礼率61% (279/456)

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

  • ベストアンサー
noname#89477
noname#89477
回答No.2

COMMANDに関しては、#1の方の通りだと思います。 ファイルチェックのルールがよくわからなかったので、2通り作りましたので参考にしてください。 (一応、動作確認済みです) #!/bin/bash # "."の有無でチェックする場合 COMMAND=$* for f in $COMMAND; do if [ $f != ${f%%.*} ]; then FILE=$f fi done echo "COMMAND=$COMMAND" echo "FILE=$FILE" #!/bin/bash # ファイル存在チェックする場合 COMMAND=$* for f in $COMMAND; do if [ -f $f ]; then FILE=$f fi done echo "COMMAND=$COMMAND" echo "FILE=$FILE"

mk278
質問者

お礼

有り難うございます。 お陰様で目的通りの動作をさせる事ができました。

その他の回答 (2)

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.3

dviやpsやtexというサフィックスがついているものを探すとすると、 #!/bin/sh COMMAND="$*" for f do case "$f" in *.dvi|*.ps|*.tex) FILE="$f" ;; esac done

mk278
質問者

お礼

有り難うございます。 お陰様で目的通りの動作をさせる事ができました。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

COMMAND の方は COMMAND="$*" でいいんじゃないかな? FILE の方はファイル名として何を期待しているかによりそうだけど.

mk278
質問者

お礼

有り難うございます。 お陰様で目的通りの動作をさせる事ができました。

関連するQ&A

  • Bシェルで不定変数名を変数として取り扱うには

    ファイル(test.txtとします)に 0755 $HOGE/herehere $FOO/bar のような形で変数を示す文字列がはいっています。 どんな変数名かは事前にわかりません。 これをシェルプログラムで、 $が付いていたら変数名と解釈して使用したいです。 どんな変数名がファイルに含まれているかがわかっているなら、 以下のようにできたのですが、 変数名が不明のときにはどうしたらファイルに含まれている変数を そのまま使用できるのでしょうか。 HOGE=`command HOGE` #HOGEを引数にcommandコマンドを呼び出した結果を$HOGEとする FOO=`command FOO` #↑test.txtの中には$HOGEや$FOOが何度も出てくるので、 #出てくるたびにcommandコマンドを使うのは避けたい。 while read LINE do  FILE=`echo $LINE|sed "s%"'$HOGE'"%$HOGE%g"` done < /test.txt

  • grepコマンドの使い方

    下記のようなファイルがあるとします。 カレントディレクトリ /home から"hello"という文字列が含まれるテキストを grepしたい場合、コマンドはどのようにすればいいのでしょうか? 色々な方法があると思いますが、よろしくお願いします。 ---------------------------------------------------------------------- /home/hoge1/foo1.txt foo2.exe foo3.txt /home/hoge2/hogehoge2/foo4.txt foo5.exe /home/hoge3/hogehogehoge3/foo6.txt foo7.exe foo8.zip ----------------------------------------------------------------------

  • 正規表現でファイル名の抽出

    社内の掲示板に属するWebアプリケーションを制作しております。 複数のファイルをアップロードするために、<input type="file" ...> で得たファイルのパスを一時的にリストに表示させる仕様になりました。 そこで、javascriptの正規表現オブジェクトで次のようなフルパスから ファイル名のみを抽出することを考えました。  a: c:\hoge.txt  b: \\foo_server\foo_dir\hoge2.txt a,bから、それぞれ hoge.txt hoge2.txt を得るために、/[^\\].*/によって \\を取り除いた後で/\\.*\..*$/ によって欲しい文字列が得られると考えましたら文字列どころか何も 得られませんでした。 /[^\\].*/までは動いているようです。 オブジェクトの使い方が誤っていると考えているのですが、どの様に 扱えばよいのか皆目見当がつかなくなりました。 大変お手数ですが、ご教示願います。

  • シェルスクリプト コマンドを変数にした時の呼び方

    はじめまして、シェルスクリプトを勉強中の者です。 コマンドを変数にいれて、まとめました。 しかしコマンドの変数を呼びこもうとするとエラーになります。 ============================================ #!/bin/sh GREP="grep" cat "${GREP} '^[0-9]' /home/hoge/test.nicdf" ============================================ ================ シェル実行結果 ============= $ ./test.sh cat: grep '^[0-9]' /home/hoge/test.nicdf: そのようなファイルやディレクトリはありません どう書けば、エラーにならずに正常に動作するでしょうか? ご教授の程よろしくお願いします。

  • コマンドプロンプト ファイル名変更 

    お世話になります。 コマンドプロンプトで”123HOGE.txt”というファイル名に"123-HOGE.txt"という風に123とHOGEの間に"-"を挿入したいのです。 ただこの123は伝票番号で長さが123-99999まで可変なのです。 HOGEは固定なので、"HOGEの前に-を入れろ"というロジックが作りたいのです。 どなたかご教授いただけませんでしょうか? よろしくお願い致します。

  • Irvineで同じファイル名のファイルをDL

    Irvineで同じファイル名のファイルをDL つまり あるサイトにhttp://hogehoge.com/hoge1/1.jpgと言うファイルがあったとして、 また別のページでhttp://hogehoge.com/hoge2/1.jpgという別のファイルがあったとします。(hoge1とhoge2が違う) その場合、Irvieでは同じフォルダにDLしようとすると、上書き確認を聞かれますが、 そういう場合に別のファイル名で保存する方法はありますか? 例えば1.jpgを別のファイル名にしてもいいです。

  • シェルから起動するコマンドの一部をマスクする

    シェルから起動するコマンドの一部にパスワードなどのセキュリティ情報が含まれている場合、それをpsコマンドなどによって見えなくするには、一般にどのような手法が採られているのでしょうか。 例えば、 #!/bin/sh USER=hoge PASS=hogehoge foo -u $USER -p $PASS というシェルを実行した時に、psコマンドで見ると foo -u hoge -p hogehoge と出ては困るわけで、 foo XXXXXXXX とかいう表示にできるとありがたいです。XXXXXXの部分は、ユーザ名やパスワードが表示されなければ、どんな表示でもいいんですけど…。

  • 連想配列の可変変数

    <?php $test[a][b][c] = "成功"; $string = 'test[a][b][c]'; echo ${$string}; ?> このコードで"成功"を出したいのですが上手くいきません 恐らく可変変数ではブラケットを文字列として扱ってしまっているのが原因だと思います どうにかうまくこれを可変変数のように上手く実現させる方法はないでしょうか?

    • ベストアンサー
    • PHP
  • grepで特定のディレクトリを除外して再帰検索するには?

    /hoge下のサブディレクトリ、ファイルで文字列mojiretsuを検索したいのですが 特に/hoge/foo下は除外して検索する場合には grepコマンドはどう記述したらいのでしょうか? # grep -lr mojiretsu /hoge だと/hoge/fooも検索されてしまいますよね。

  • bashで変数を可変させたい

    /homeの中にあるフォルダaaa、bbb、cccのサブフォルダの容量を取得し、結果をそれぞれ、 /root/batchの中にaaa、bbb、cccというファイル名で出力。 そのファイルをcatで出力し、結果をmbox_#(#は数字)という変数に保存するバッチを作成したいと四苦八苦しながら作業を行なっております。 バッチを実行しますと、以下のようなエラーが出力されます。 ./abcde.sh: line 16: mbox_1=62: command not found ./abcde.sh: line 16: mbox_2=1: command not found ./abcde.sh: line 16: mbox_3=1: command not found mbox_#の#を可変させたいのですが、何か良い記述方法はございますでしょうか? ==以下バッチ内容== #!/bin/sh Path1=/home Path2=/root/batch n=0 for box in aaa bbb ccc do n=$[$n+1] for var in `ls $Path1/$box` do du -sm $Path1/$box/$var >> $Path2/$box done 'mbox_'$n=`cat $Path2/$box` done お手数をおかけしますが、宜しくお願い致します。