我正在寻找基本的循环,如:

for(int i = 0; i < MAX; i++) {
  doSomething(i);
}

但痛击。

有帮助吗?

解决方案

这个网站:

for i in $(seq 1 10);
do
    echo $i
done

其他提示

for ((i = 0 ; i < max ; i++ )); do echo "$i"; done

Bash for 由于一个变量(迭代)和一个清单的话,那里的迭代将,好吧,迭代。

所以,如果你有一个有限的清单的话,就把它们放在语法如下:

for w in word1 word2 word3
do
  doSomething($w)
done

可能你想要迭代沿着一些数字,因此可以使用 seq 命令产生一个列表中的数字给你:(从1到100例)

seq 1 100

并利用它为循环:

for n in $(seq 1 100)
do
  doSomething($n)
done

注意到 $(...) 语法。这是一个庆典的行为,它可以让你通过的输出一项命令(在我们的情况 seq)到另一个(的 for)

这是真正有用的,当你迭代所有目录中的一些路径,例如:

for d in $(find $somepath -type d)
do
  doSomething($d)
done

无限可能产生的清单。

Bash 3.0+ 可以使用这种语法:

for i in {1..10} ; do ... ; done

..它避免了产生外部程序扩大序(例如 seq 1 10).

当然,这具有同样的问题 for(()) 解决方案,被捆绑打击和甚至一个特别的版本(如果此事项向您)。

尝试 bash 建立在帮助:


$ help for

for: for NAME [in WORDS ... ;] do COMMANDS; done
    The `for' loop executes a sequence of commands for each member in a
    list of items.  If `in WORDS ...;' is not present, then `in "$@"' is
    assumed.  For each element in WORDS, NAME is set to that element, and
    the COMMANDS are executed.
for ((: for (( exp1; exp2; exp3 )); do COMMANDS; done
    Equivalent to
        (( EXP1 ))
        while (( EXP2 )); do
            COMMANDS
            (( EXP3 ))
        done
    EXP1, EXP2, and EXP3 are arithmetic expressions.  If any expression is
    omitted, it behaves as if it evaluates to 1.


我通常喜欢使用一个微小的变异的标准为循环。我经常使用这种执行命令的一系列远程的主机。我利用来砸的支撑扩大创建的循环,请允许我以创建非数字为的循环。

例如:

我要运行正常运行时间命令在前端主1-5和后端主1至3:

% for host in {frontend{1..5},backend{1..3}}.mycompany.com
    do ssh $host "echo -n $host; uptime"
  done

我通常运作这个行命令与分号上的,而不是更易读版本以上。关键的使用情况的考虑,括号允许指定多个值插入一个string(例如预{foo bar}后结果在prefoopost,prebarpost)和允许计数/序列通过使用双周期(可以使用a..z等)。但是,期间双语法是一个新的特点砸3.0;早期版本不会支持这一点。

#! /bin/bash

function do_something {
   echo value=${1}
}

MAX=4
for (( i=0; i<MAX; i++ )) ; {
   do_something ${i}
}

这里有一个例子,也可以工作在旧炮弹,同时仍然有效的大计数:

Z=$(date) awk 'BEGIN { for ( i=0; i<4; i++ ) { print i,"hello",ENVIRON["Z"]; } }'

但祝你好运做的有用的东西内部 awk: 我怎么使用外壳变量在awk剧本吗?

如果你intereased只是在庆典的"((...))"解决提出的上是最好的,但是如果你想要的东西POSIX际兼容的,将在所有的unix系统你必须使用"expr"和",同时",这是因为"(())"或"seq"或"i=i+1"不是,便携式之间的各种炮弹

我使用的变化这所有的时间处理文件...

文件*.日志;做回"你的东西:$文件";echo"做更多的东西:$文件";完成;

如果处理列表的文件是什么你有兴趣,看到 -execdir 选择 文件.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top