• 締切済み

shellのfor文の書き方についての質問です

使い始めたばかりなので、くだらない質問かもしれないのですが、調べてもわからないのでよろしくお願いします。 shellで、for文を使いたいのですが、その中身が多くて、 for s in 3000 3001 3002 ・・・7999 do 中身 done と打つ以外の便利な方法が知りたいのですが、なにかありますでしょうか??例えば、in の中身を3000から8000未満までと一気に指定出来るような。 よろしくお願いします。

みんなの回答

noname#223623
noname#223623
回答No.4

#2です。前回の回答を投稿してからちょっと飲んで帰ってきたので、普段なら投稿しないことですが投稿してしまいます。部分的に(あるいは全文)規約違反かもしれません。 まずは、質問者さんに対して。 根拠はありませんが#3さんの回答のほうがBetterだと思います。根拠がないというのは#3さんのせいではなく、私がまだ#3の回答を理解できていないからです。しかし、#3さんは私よりもこのあたりのことを熟知している方ですので(普段の回答から)信頼のおける回答だと思います。今回の件ではどちらでもいいかもしれませんが。 #3さんへ。 いつも回答拝見しております。 > Linuxならseqはあるでしょうから、#2の方の方法が簡単でしょう。 確かにLinuxとは書いてありませんね。UNIXはちゃんと使ったことがないので、seqがあるかどうかもよくわかりませんでした。 > ただ、数千ならいいでしょうが、数百万とかだとやめたほうがいいかも。それだけの文字列がメモリ上に作られるので。 確かに、それは気になっていたことです。まだ#3の内容を理解しておりませんが(2重括弧の意味とか)、知らないことがたくさんあるのを思い知ります。有意義な御指摘に感謝します。 P.S. #3さんのツッコミがうれしくて、酔いが醒めたら恥ずかしい思いをするのは覚悟で投稿しました。酔っ払っての投稿なので、質問者さんに不快な感じを与えたかもしれません。だとしたら大変申し訳ないことだと思っております。

全文を見る
すると、全ての回答が全文表示されます。
  • notnot
  • ベストアンサー率47% (4854/10269)
回答No.3

Linuxならseqはあるでしょうから、#2の方の方法が簡単でしょう。 ただ、数千ならいいでしょうが、数百万とかだとやめたほうがいいかも。それだけの文字列がメモリ上に作られるので。 Linuxならbashでしょうから、Cをご存じなら、 for((s=3000;s<8000;++s)) do .... done でもOK。カッコは二重です。

全文を見る
すると、全ての回答が全文表示されます。
noname#223623
noname#223623
回答No.2

bashで回答。  $ cat sample.sh  for i in `seq 3000 1 3010`  do   echo i: $i  done  $ bash sample.sh  i: 3000  i: 3001  i: 3002  i: 3003  i: 3004  i: 3005  i: 3006  i: 3007  i: 3008  i: 3009  i: 3010 確認用なので範囲は3000~3010。でも数字を変えるだけですね。

参考URL:
http://www.geocities.jp/geo_sunisland/for.html
全文を見る
すると、全ての回答が全文表示されます。
noname#136147
noname#136147
回答No.1

forではないけれど、 i=3000 while [ $i -lt 8000 ] do echo $i i=`expr $i + 1` done とかやってみるのはどうでしょう。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • パイプの後半をfor文にする

    `コマンド` | for $1 in       do        `コマンド`       done としたいのですが、doからdoneの部分がうまくいかず 構文エラーになります。 パイプ以下を、{}でグルーピングしてもうまくいきません。 `コマンド` | { for $1 in       do        `コマンド`       done; } どうしたらうまくいくでしょうか?

  • バッチファイルのfor文の使い方がわかりません。

    バッチ初心者です。 指定したフォルダのテキストファイルを一括置換するバッチファイルを作成したのですが、 for文を使うところでつまづいてしました。 for文のin( )内にディレクトリを入れると失敗してしまいます。 失敗例↓ for %%f in (d:\aaa\*.txt) do ( set fname=%%f set fname=!fname:%1=%2! ren %%f !fname! ) for文を for %%f in (*.txt) にすると成功します。 IN( )内にディレクトリを入れると処理が失敗するのはなぜでしょうか?? helpを読んでもわかりません。 試しにオプション付けて for /r d:\aaa %%f in (*.txt) do echo %%f を実行すると成功するので、 for /r d:\aaa %%f in (*.txt) do ( ・・・・ ) にしてみましたが、成功しません。。。

  • DOSコマンドのFOR文で空白を含むファイルパスの指定方法

    DOSコマンドのFOR文で空白を含むファイルパスの指定方法 DOSコマンドのFOR文で、FORの繰り返し条件に 空白を含むファイルパスを指定する方法を教えてください。 やりたいことのイメージはこんな感じです。 for /f %%a in (C:\Documents and Settings\user\デスクトップ\list.txt) do ( echo %%a ) バッチファイルとlist.txtを同じディレクトリに配置し、かつ FOR文の前にCDを含めない事を条件にすれば 下記でもうまくいきます。 for /f %%a in (list.txt) do ( echo %%a ) 他のコマンドとの関係からこの前の処理で一度ディレクトリの 変更を行なう処理を含むため、FOR文で指定するファイルは 絶対パス指定をしたいと思っています。 簡単なことのような気もするのですが、 もしかしたら出来ないのかもしれないとも思っています。 FORの繰り返し条件に空白を含むファイルパスを 指定することはできるのでしょうか? 出来るのならばその方法を教えてください。 よろしくお願いします。

  • バッチでfor文で文字列の中身を繰り返したい

    バッチで、for文で、半角スペースやタブ以外で区切られた文字列から、区切り文字毎に 取り出したいのですが、最初の1回しか取り出せません。最後まで繰り返しが行われませ ん。 バッチでは、そもそも、半角スペースやタブ以外では、文字列の中身を繰り返すことは できないのでしょうか。 それとも、他に良い方法があります。 やっていることは、 例えば、 for文で、スラッシュ「/」で区切られた文字列からスラッシュ毎に取り出そうとしている のですが、最初の1回目しか表示されず、最後まで繰り返しが行われません。 以下、色々と試したのですが..... set str=abc/def/ghi/jkl/mno/pqr/stu/vwx/yz for %%a in (%str%) do echo %%a の場合は、 1行そのまま表示されます。(あたりまえです。) for "delims=/" %%a in (%str%) do echo %%a for "delims=/" %%a in ('echo %str%') do echo %%a の場合は、 「"delims=/" の使い方が誤っています。」となります。 for /f "delims=/" %%a in ('echo %str%') do echo %%a の場合は、 最初の1回目の「abc」しか表示されず、そこで処理が終わり、残りが表示されない。 期待している結果は、 これを、 abc def ghi jkl mno pqr stu vwx yz と表示させたい。 set str=abc def ghi jkl mno pqr stu vwx yz for %%a in (%str%) do echo %%a の場合は、 abc def ghi jkl mno pqr stu vwx yz と表示されます。 バッチでは、そもそも、半角スペースやタブ以外では、文字列の中身を繰り返すことは できないのでしょうか。 できる場合、その方法を教えてください。また、他に良い方法がありましたら、教えて下さい。

  • MS-DOS: for文で「01」が「1」になってしまいます

    よろしくお願いします。 Windows 2000 Server についての質問です。 for文を使いバッチを組んでいます。 形式は下記です。 FOR /L %変数 IN (開始,ステップ,終了) DO コマンド [コマンドパラメータ] 1.例えば、次のようにバッチファイル(test.bat)に記述します。  for /L %%F IN (%1,1,%2) DO echo %%F 2.そして、次のようにコマンドプロンプトで実行します。  test.bat 01 06 3.エコーとして返るのは、1,2,3,4,5,6 という1桁の数値であり、   01,02,03,04,05,06 という2桁の数値ではありません。   後者のように2桁で返したいのですが、どのようにすれば良いでしょうか。

  • バッチファイル For 文 スペース

    いつも大変御世話になっております。 WindowsXP環境下の 【D:\test】フォルダ直下に TEST.conf というファイルがあり 中身は1行こんな文があります。↓ test001=12345 6 そして 【D:\test\bat】フォルダ直下に TEST.bat というファイルがあり 中身のードはこんなコードです。↓ For /F "tokens=1*" %%i in (..\TEST.conf) do set %%i SET IN_FILE=%test001% 実行結果は SET IN_FILE=12345 になりました。 なぜ SET IN_FILE=12345 6 ではないのですか? スペースを _ (アンスコ)など何か入れてあげると SET IN_FILE=12345_6 上記バッチファイルのFor文では、スペース手前までしか見てくれないのでしょうか? 他に方法は無いのでしょうか? もしご存知の方がいらっしゃるようでしたら、お手数ですが 実現可能かどうかをご回答願いますでしょうか? 以上、何卒宜しくお願い致します。

  • コマンドプロンプトのfor文の処理について

    以下のようなスクリプトを書き,拡張子を除いた文字列を抽出できているようなのですが, for文の中の ”echo”で出力することができません. 具体的には,入力として,「hoge01.txt」 を与え 「hoge01」 を抽出したいです. 出力結果として 「echoはONです」 とでます. for文の後のechoでは,「hoge01」と問題なく出力されます. これは何故なのかご教授していただけませんでしょうか? ------------------------------------------- for %%i in (*.txt) do (set/p c=%%~ni & echo %c%) echo %c% ------------------------------------------- for文の中だと,変数の指定方法等が異なるのでしょうか? 勉強不足で大変恐縮ですが,どうぞよろしくお願いいたします.

  • MSDOSのfor文

    DOSコマンドのFOR文で結果を出力させるにはどういう記述をすればよいでしょうか? 実行させたいのは、 for /d %%a in (ファイルパス\*) do del "%%a\*.cab" という内容なのですが、末尾に「>> log.log」だとうまく出力されません。 ""で囲った中にしてみてもやはり同じ状況なのですが、どうにか出力させることはできないでしょうか?

  • FOR文のログファイル書き出し

    以前こちらで、for文を教えてもらいました。 同じディレクトリにある*.txtファイルの最後の行に、XXXXXを追記するというものです。 FOR %%F IN (*.txt) DO echo XXXXX >> %%F ここで同じディレクトリにある*.txtが、2000ファイル近くあるので、処理がされたかどうかをログファイルとして書き出したいのですが、FOR文を使ったリダイレクション(>>)は、どのようにやるのでしょうか? (当然ながら、FOR %%F IN (*.txt) DO echo XXXXX >> %%F >> log.txt などとしてもダメでした) お手数をおかけします。よろしくお願いいたします。

  • ruby for文

    for文を用いる s=1+2+5+10+17...+50 s=0;i=1;j=1 for i in 1..100 s+=1 i+=j if i>50 break end j+=2 end puts s この問題の意味がよくわかりません。。 よかったら説明してくれると助かります。。 j+=2 ここはなんで2なんしょうか? 特にここのところはなんでこうなっているんですか? iとかjとかを使っている意味がわかりません。。

    • ベストアンサー
    • Ruby