题
我正在寻找基本的循环,如:
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 选择 文件.