- ベストアンサー
foreachの引数について
Tacosanの回答
- Tacosan
- ベストアンサー率23% (3656/15482)
何をやりたいのかさっぱり読みとれないので的外れかもしれませんが, xargs は使えませんか?
関連するQ&A
- csh foreachで「*」でエラーとなる
シェルの初心者です。よろしくお願い致します。 cシェル(csh)で、リストをforeachで1行ずつ取得しているのですが、「*(アスタリスク)」の値があると「一致しません」とエラーで落ちてしまいます。 「*(アスタリスク)」も正常に読んで、ループを回すことはできないのでしょうか? foreach FILE ( \"`/bin/cat リストファイル名`\" ) リストは「|(パイプ)」区切りにしてあります。 foreachで一行ずつ、読んでループしています。 ご存知の方は、お力をお貸し下さい。 よろしくお願い致します。
- ベストアンサー
- その他(プログラミング・開発)
- Linuxの引数について
Aシェルは実行したときに自動的に別のところから引数を取得しています。 その値をBシェルに引数で渡したいのです。 BシェルはAシェルの中に書いており、実行する仕組みになっています。 Aシェルの中身は 1.Bシェル実行(ここのタイミングで引数を渡したい) 2.引数を取得し、引数をつかってコマンドを実行 ちなみに引数は全て同じ値を取得しています。 もしかして、Bシェルを実行する前に引数を取得しなければいけないのでしょうか?どなたか分かるかたがいらっしゃったらご回答宜しくお願い致します。
- 締切済み
- その他(プログラミング・開発)
- shellスクリプトに複数の引数を渡したい
shellスクリプトに複数の引数を渡したいと考えています。 下記のようなperlスクリプトを兼ねる事でやりたいことは達成できました。 これをシェルスクリプトだけでやろうとしていて、ハマってしまい、やり方がわからなかったので、質問しています。 ・echo.shの中身 $ cat echo.sh echo $1 $2 ・imglist.plの中身 $ cat imglist.pl my@imglist= `ls -1 *{.gif,.bmp,.jpg,.jpeg,.png} 2>1&`; foreach(@imglist){ my@name=split /\./,$_; system("bash ./echo.sh $name[0] $name[1]"); } ・実行すると、無事echo.shに引数が2つ渡る。 $ perl imglist.pl abc1 jpg abc10 png abc11 png abc2 jpg abc3 jpg これをシェルのみでやろうとして、はまってしまいました。 以下は、パイプ処理等を使ったりしてやってみたのですが出来ませんでした。 ・awkでファイル名と拡張子に分解し、パイプで渡そうとしても何故か渡らない・・ $ ls -1 *{.gif,.bmp,.jpg,.jpeg,.png} | awk -F . '{print $1,$2}'| bash ./echo.sh ・ファイルに一旦保存し、catコマンドでパイプで渡しても駄目 $ ls -1 *{.gif,.bmp,.jpg,.jpeg,.png} | awk -F . '{print $1,$2}' > imglist.txt $ cat imglist.txt | bash ./echo.sh ・echoコマンドを使ってパイプで渡しても駄目 $ echo `cat imglist.txt` |bash ./echo.sh ・for.shというファイルを作成し、for構文でimglist.txtの中身を渡すと引数が一つずつしか渡らない $ cat for.sh for id in $(cat imglist.txt); do echo $id done $ bash for.sh tile1 jpg tile10 jpg どうやれば、コマンドライン上やシェルスクリプトだけで、今回はファイル名と拡張子という形で複数行からなる2つの引数を渡すことができますでしょうか
- ベストアンサー
- Perl
- bahsの引数について
大変簡単な質問で恐縮なのですが、シェルスクリプトの引数(複数)を受け取り受けとったパスの中からファイル名だけを取り出すというのはどのようにするのでしょうか? a=$# b=$( basename $# ) echo $b こちらを実行すると引数の個数のみ表示されてしまいます。 そうではなくファイル名を個数分だけ表示さたいです。
- ベストアンサー
- Linux系OS
- シェル(foreachを利用した)教えて
Foreachを使ったシェルの作成について教えて下さい。 全くの初心者です。 何台かのサーバ(Solaris)のバージョンをリモートログインして 情報を収集したいのです。 .rhostsファイルに設定しているのでパスワード入力は省略できます。 Foreachを使用して、かなり無理やりですが、こんな感じかと つなぎ合わせてみたのですが・・・・ Foreach H (`192.168.3.2`|`192.168.3.9`) echo ${H},rsh ${H} ’uname -a’ | 収集したいことは 数台あるサーバへリモートログイン(192・・適当なアドレスです) して uname -aコマンドのバージョン情報と 取得したアドレスを 一覧表示したいのですが・・・ シェルも初心者なので、すみません 教えて下さい。 収得した結果一覧 アドレス バージョン 192.168.3.2 10
- ベストアンサー
- PHP
- awkコマンドに引数を渡す方法
awkコマンドに対して引数を渡す方法が知りたいです。 例えば以下のようなリストファイルがあったとします。 --------------------------------------- % cat test.lst 454 100 37536 200 32432 300 34q2 400 --------------------------------------- そこで以下のシェルを実行すると --------------------------------------- #!/bin/sh for VAL in 100 200 300 do CNT=`cat test.lst | awk '$2 == $VAL {print $1}'` echo "$VAL : $CNT" done --------------------------------------- awkコマンド内の$VALが引数ではなく文字列として認識されてしまうため、 出力結果が 100 : 200 : 300 : となってしまいます。 100 : 454 200 : 37536 300 : 32432 という結果を出力したい場合(awk内の引数を有効にする場合)どうすればよいでしょうか? awkを使用しない方法もあるかと思いますが、今回はawkを使った方法を知りたいです。 宜しくお願い致します。
- ベストアンサー
- その他(プログラミング・開発)
- linux シェルの変数、引数の指定について教えて
シェルの勉強を始めまして、 ファイルを複合化、解凍するだけのシェルを作ろうと思っています。 fukugo.sh $1 でシェルを実行 /home/allday/log/upload/201701261507(←ログの作られる時間で変わります)aaaaa.tar.gz.e というファイルを$1引数に指定 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー !/bin/sh # # init CWD=$(cd $(dirname $0) && pwd) #cd ${CWD} # if [ -z $1 ] then echo "引数を指定してください" exit fi echo "Start" echo "指定されたtarファイルを複合化します" fukugo-decrypt $1 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー fukugo-decryptは私の会社で使われているtarを複合化するコマンドです(環境変数?) 複合化すると /home/allday/log/upload/201701261507aaaaa.tar.gz というファイルになります。 このできたファイルをシェルに入れる次のコマンドの引数にしたいです。 が最後の.eが無くなるため$1では指定できないと思います。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー echo "複合化されたファイルを/tmpフォルダに入れておきます" mv /home/allday/log/upload/201701261507aaaaa.tar.gz /tmp/ echo "ファイルを展開します" tar zxvf /tmp/201701261507aaaaa.tar.gz echo "End" ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー 複合化された後の/home/allday/log/upload/201701261507aaaaa.tar.gzや 移動後の/tmp/201701261507aaaaa.tar.gzは変数で設定するとよいと聞いたのですが、 どのように設定すればよいかわかりません。 お分かりになる方、お願いします。 教えてください。
- ベストアンサー
- Linux系OS
- シェルスクリプト 引数の引渡しについて
こんにちは。現在シェルスクリプトを勉強中なのですがどうしてもわからないことがあり投稿させていただきました。 シェルスクリプトにて作成した引数(引数にスペースがある場合)を別のシェルスクリプトへ渡そうとしたときにうまく引き渡せなくて困っています。 詳しくは以下のスクリプト参照願います。 (1)引数作成のスクリプト _/_/_/_/_/_/_/_/_/_/_/_/ #!/bin/sh a="HELLO" b="\"WOW WOW\"" test.sh $a $b _/_/_/_/_/_/_/_/_/_/_/_/ (2)test.sh _/_/_/_/_/_/_/_/_/_/_/_/ #!/bin/sh echo $1 echo $2 echo $3 _/_/_/_/_/_/_/_/_/_/_/_/ これを実行すると $1=HELLO $2="WOW $3=WOW" となってしまいます。 これを $1=HELLO $2=WOW WOW $3=NULL(空欄) となるようにシェルスクリプトで作成することはできないのでしょうか? ご教授よろしくお願いします。 よろしくお願いします。
- ベストアンサー
- その他(プログラミング・開発)
- foreach のバグでしょうか。PHP 5.3.3 で悩んだところが
foreach のバグでしょうか。PHP 5.3.3 で悩んだところがあります。 あるレコードが正規表現にマッチした場合、そのレコードに対して何らかの処理をするスクリプトを書いていました。 しかし思ったように動かず原因を調べました。結果、配列の値が変わっていることに気づきました。 ◇テスト用レコードの内容 http://www.yahoo.co.jp/ http://www.bing.com/ http://www.goo.ne.jp/ http://www.google.co.jp http://d.hatena.ne.jp/ ◇先頭一致して欲しい文字列 http://www.google.co.jp/ http://www.bing.com/ http://www.youtube.com/ この場合、処理の対象は2件です。 私が書いたスクリプトでは3回マッチしてしまいます。 以下、テスト用に作ったスクリプトです。 <?php // URL のパターンを用意 (とりあえず以下の3パターン) $ar = array(); $ar['Google'] = array( 'URL' => 'http://www.google.co.jp/' ); $ar['Bing'] = array( 'URL' => 'http://www.bing.com/' ); $ar['YouTube'] = array( 'URL' => 'http://www.youtube.com/' ); // 先頭一致の正規表現にする foreach($ar as $key => &$value){ $value['regex'] = '/^' . preg_quote($value['URL'], '/') . '/'; } echo("URL の パターンを出力してみる/n"); print_r($ar); // テスト用 レコード $list = array(); $list[] = 'http://www.yahoo.co.jp/'; $list[] = 'http://www.bing.com/'; // match. $list[] = 'http://www.goo.ne.jp/'; $list[] = 'http://www.google.co.jp/'; // match. $list[] = 'http://d.hatena.ne.jp/'; // マッチするのは2回のみ...のはずが for($n = 0; $n < count($list); $n ++){ foreach($ar as $key => $value){ if(preg_match($value['regex'], $list[$n], $match)) echo("match.\n"); } } echo("もう一度 URL のパターンを出力してみる\n"); print_r($ar); echo("なぜか一番最後の配列の値が変わっている。\n"); ?>
- ベストアンサー
- PHP
- シェルで引数した「*」をそのまま使いたい(OSはFedora12)
シェルで引数した「*」をそのまま使いたい(OSはFedora12) シェルの勉強をしているのですが、うまくいかないので質問させていただきます。 1つ目の引数に「*」か「+」を入れ、2つ目以降の引数に数字を入れ「*」の時は掛け算。 「+」の時は足し算をするシェルを作りたいと思っています。 イメージ ./calc.sh + 2 3 4 答えは 9 です ./calc.sh * 2 3 4 答えは 24 です 足し算はうまくできたのですが、掛け算ができません。 本やネットで調べて「これは」と思うものは試してみたのですが・・・。 sh -x で実行すると 「*」にシェルを実行するフォルダのファイル名が入っている様子です。(lsを実行した時と同様に) 何とか「*」を「*」としてそのまま受取る方法(受取って掛け算)は無いでしょうか? 以下は希望です。 ・「*」を1つ目の引数として掛け算さえできれば「*」を「*」としてそのまま受取れなくてもいい。 ・引数として渡す「*」はできれば「'」「"」「\」等を付けたくない。 ・できれば、参考URLも教えて頂きたい。 よろしくお願いします。 質問が初めてなのでカテゴリや聞き方に誤りがあればそちらも指摘して頂ければと思います。
- ベストアンサー
- その他([技術者向] コンピューター)