Joh*_*her 86 bash iterator for-loop
我正在寻找基本的循环:
for(int i = 0; i < MAX; i++) {
doSomething(i);
}
Run Code Online (Sandbox Code Playgroud)
但对于bash.
Rob*_*ick 97
从这个网站:
for i in $(seq 1 10);
do
echo $i
done
Run Code Online (Sandbox Code Playgroud)
Nic*_*tes 60
for ((i = 0 ; i < max ; i++ )); do echo "$i"; done
Run Code Online (Sandbox Code Playgroud)
Fer*_*cal 33
bash for包含一个变量(迭代器)和迭代器将迭代的单词列表.
因此,如果您有一个有限的单词列表,只需将它们放在以下语法中:
for w in word1 word2 word3
do
doSomething($w)
done
Run Code Online (Sandbox Code Playgroud)
您可能希望迭代某些数字,因此您可以使用该seq命令为您生成数字列表:(例如,从1到100)
seq 1 100
Run Code Online (Sandbox Code Playgroud)
并在FOR循环中使用它:
for n in $(seq 1 100)
do
doSomething($n)
done
Run Code Online (Sandbox Code Playgroud)
请注意$(...)语法.这是一个bash行为,它允许你将输出从一个命令(在我们的例子中seq)传递给另一个命令(the for)
当您必须遍历某个路径中的所有目录时,这非常有用,例如:
for d in $(find $somepath -type d)
do
doSomething($d)
done
Run Code Online (Sandbox Code Playgroud)
生成列表的可能性是无限的.
Dav*_*ner 28
Bash 3.0+可以使用以下语法:
for i in {1..10} ; do ... ; done
Run Code Online (Sandbox Code Playgroud)
..避免产生外部程序来扩展序列(例如seq 1 10).
当然,这与for(())解决方案存在同样的问题,与bash甚至特定版本相关(如果这对您很重要).
Pat*_*otz 14
尝试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.
Run Code Online (Sandbox Code Playgroud)
我通常喜欢使用标准for循环的轻微变体。我经常使用它在一系列远程主机上运行命令。我利用 Bash 的大括号扩展来创建 for 循环,从而允许我创建非数字for循环。
例子:
我想在前端主机 1-5 和后端主机 1-3 上运行 uptime 命令:
% for host in {frontend{1..5},backend{1..3}}.mycompany.com
do ssh $host "echo -n $host; uptime"
done
Run Code Online (Sandbox Code Playgroud)
我通常将其作为单行命令运行,行末尾带有分号,而不是上面的更具可读性的版本。关键的使用注意事项是大括号允许您指定要插入到字符串中的多个值(例如 pre{foo,bar}post 结果为 prefoopost, prebarpost),并允许使用双句点进行计数/序列(您可以使用. .z等)。然而,双句点语法是 Bash 3.0 的新功能;早期版本不支持此功能。
#! /bin/bash
function do_something {
echo value=${1}
}
MAX=4
for (( i=0; i<MAX; i++ )) ; {
do_something ${i}
}
Run Code Online (Sandbox Code Playgroud)
这是一个也可以在较旧的 shell 中工作的示例,同时对于大量计数仍然有效:
Z=$(date) awk 'BEGIN { for ( i=0; i<4; i++ ) { print i,"hello",ENVIRON["Z"]; } }'
Run Code Online (Sandbox Code Playgroud)
但是祝你好运在里面做有用的事情awk:如何在 awk 脚本中使用 shell 变量?