Linux中重复命令n次
Contents
1. 简介
在使用 Linux 脚本时,重复命令是最常用的操作之一。
在这个快速教程中,我们将介绍如何使用不同的方法执行n次操作。
2. 使用for循环
让我们首先定义一个我们将在整个示例中使用的任务。为简单起见,我们将“命令”一词打印到控制台五次。我们还将尽可能包括一个迭代编号。
让我们直接跳进去,从古老的“for-loop”开始:
for i in {1..5}
do
echo "Command no. $i"
done
上面的示例导致输出:
Command no. 1
Command no. 2
Command no. 3
Command no. 4
Command no. 5
我们还可以将这些操作浓缩为一个单行解决方案:
for i in {1..5}; do echo "Command no. $i"; done
对于我们需要基于条件的表达式的场景,我们也可以使用更编程风格的方法:
for ((i=0;i<5;i++)); do echo "Command no. $i"; done
3. 使用while循环
为了实现可重复的命令,我们还可以使用“while-loop”:
i=1
while [[ $i -le 5 ]]; do
echo "Command no. $i"
let ++i;
done
和前面的例子一样,我们可以在一行中实现这个循环:
i=1; while [[ $i -le 5 ]]; do echo "Command no. $i"; let ++i; done
4. 使用seq和xargs
现在让我们使用一种不那么直接的方法,这种方法被证明是非常有效的。
根据 Linux 文档,** seq打印数字序列,* xargs*构造一个参数列表并对每个参数执行指定的命令**。
考虑到这一点,我们可以通过管道将这两个操作创建一个可重复的命令:
seq 5 | xargs -I{} echo "Command no. {}"
在上面的示例中,我们使用了带有占位符字符串“{}”的*-I*标志。然后将已定义命令中的占位符替换为序列号,从而产生与我们在上面看到的相同的输出。
5. Bash 函数
到目前为止描述的每个解决方案都需要一些样板代码。 如果我们想经常使用可重复的命令,我们可以将其中一个示例重写为 bash 函数:
function repeat(){
for ((i=0;i<$1;i++)); do
eval ${*:2}
done
}
我们现在可以在 shell 中使用我们的函数:
repeat 5 echo "Command"
在上面的示例中,我们使用eval来使用不可执行的命令,例如变量赋值。
我们还介绍了*${*:2}*,它从索引 2 开始计算所有命令输入变量的数组。
由于我们的实现接受多个参数,我们还可以将多个命令传递给我们的重复函数:
repeat 5 echo "Command" ";" echo "Another command"
6. ZSH
前面描述的示例对每个 bash shell 都有效,但还有其他解决方案,例如 ZSH。
这个 shell 有一个简单的内置函数,用于将命令重复n次:
repeat 5 echo "Command"
对于多个命令:
repeat 5 {echo "Command1"; echo "Command2"}