• 締切済み

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% (4900/10359)
回答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

専門家に質問してみよう